JS中的call()和apply()方法(转)

转自:http://uule.iteye.com/blog/1158829

JS中的call()和apply()方法

博客分类:
  •  
  • JS

1、方法定义

call方法: 
语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
说明: 
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

apply方法: 
语法:apply([thisObj[,argArray]]) 
定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
说明: 
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

 

2、常用实例

a、

Java代码  收藏代码
  1. function add(a,b)  
  2. {  
  3.     alert(a+b);  
  4. }  
  5. function sub(a,b)  
  6. {  
  7.     alert(a-b);  
  8. }  
  9.   
  10. add.call(sub,3,1);   

 这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

 

b、

Java代码  收藏代码
  1. function Animal(){    
  2.     this.name = "Animal";    
  3.     this.showName = function(){    
  4.         alert(this.name);    
  5.     }    
  6. }    
  7.   
  8. function Cat(){    
  9.     this.name = "Cat";    
  10. }    
  11.    
  12. var animal = new Animal();    
  13. var cat = new Cat();    
  14.     
  15. //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
  16. //输入结果为"Cat"    
  17. animal.showName.call(cat,",");    
  18. //animal.showName.apply(cat,[]);  

 call 的意思是把 animal 的方法放到cat上执行,原来cat是没有showName() 方法,现在是把animal 的showName()方法放到 cat上来执行,所以this.name 应该是 Cat

 

c、实现继承

Java代码  收藏代码
  1. function Animal(name){      
  2.     this.name = name;      
  3.     this.showName = function(){      
  4.         alert(this.name);      
  5.     }      
  6. }      
  7.     
  8. function Cat(name){    
  9.     Animal.call(this, name);    
  10. }      
  11.     
  12. var cat = new Cat("Black Cat");     
  13. cat.showName();  

 Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.

 

d、多重继承

Java代码  收藏代码
  1. function Class10()  
  2. {  
  3.     this.showSub = function(a,b)  
  4.     {  
  5.         alert(a-b);  
  6.     }  
  7. }  
  8.   
  9. function Class11()  
  10. {  
  11.     this.showAdd = function(a,b)  
  12.     {  
  13.         alert(a+b);  
  14.     }  
  15. }  
  16.   
  17. function Class2()  
  18. {  
  19.     Class10.call(this);  
  20.     Class11.call(this);  
  21. }  

 很简单,使用两个 call 就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments
还有 callee,caller..

 

例子来源:http://xiaofeizm55333.iteye.com/blog/80913

http://www.iteye.com/topic/599108   及回复..

转载于:https://www.cnblogs.com/weizhxa/p/6484060.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国AI芯片产业发展白皮书:未来三年年均增长率超50%

来源:赛迪顾问《中国AI芯片产业发展白皮书》从AI芯片的定义及分类、发展过程与现状、应用机会、竞争格局、发展趋势等多角度全面剖析AI芯片的发展新态势、 技术演进及行业格局,旨在为业内相关企业把握行业发展动态、挖掘市场机遇,提供借鉴与参…

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源: IEEE电气电子工程师尽管大肆宣传,人工智能仍需数年时间才能显著提高经济生产力。2016年,总部位于伦敦的Alphabet(也是谷歌的母公司)的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…

张恭庆院士:数学的意义(最全最牛的解释)

来源:数学严老师北京大学数学科学学院教授、中国科学院院士、第三世界科学院院士数学既是一种文化、一种“思想的体操”,更是现代理性文化的核心。马克思说:“一门科学只有当它达到了能够成功地运用数学时,才算真正发展了。”在前…

oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件

最近有需求要导出一个专业的详单,用于倒入sqlserver系统,要求用分隔符隔开各字段。一开始准备用toad查询出来在save as,但发现表太多,要一张一张表盯着,而且由于详单数据量大,查询导出占用了大量的客户端内…

vue mxgraph渲染xml页面_Vue的两个版本

Vue.js分为两个版本,简单来说就是一个是完整版vue.js,一个是非完整版vue.runtime.js:1. HTML的书写位置不同完整版:完整版的HTML书写的位置有两个,一个是直接在 *.html 文件中使用 Vue 语法,如下所示&#…

美智库发布报告:《美国在人工智能时代的行动蓝图》

来源:新美国安全中心12月17日,新美国安全中心发布报告《美国人工智能世纪:行动蓝图》,指出先进计算、量子科学、人工智能、合成生物学、5G、增材制造等技术的快速进步正在改变技术运行机制,其中人工智能将产生最广泛的…

四则运算01

编写随机生成30道小学数学题目: 源代码: package test; public class lianxi {String f(){int i (int)(Math.random()*10);int j (int)(Math.random()*10);if(i>j){int temp i;i j;j temp;}return ("("i"/"j")")…

2019-2021年中国AI芯片市场预测与展望数据

来源:赛迪顾问预计未来三年AI芯片市场规模仍将保持50%以上的增长速度,到2019年中国AI芯片市场规模将达到124.1亿元。从细分市场结构来看,云端训练芯片的比例仍然最大,但增速最慢,云端推断芯片与终端推断芯片市场在未来…

java. oracle 存储文件,oracle调用java类遍历磁盘文件

利用oracle自带的utl_file包可以访问磁盘文件,但有个限制--无法访问文件夹?什么意思呢?就是说oracle只能访问指定的文件,而不能访问文件夹下的未知文件。所以,如果要通过oracle去遍历某指定路径下的所有文件&#xff0…

python安装(原系统中已有python2)

由于项目中需要使用python3的特征,例如对中文的支持而不使用unicode,虽然一般装系统的时候会带有python2版本,但是还需要重新安装。这里给大家说下,不需要卸载python2,只需要重装python3即可。 下载python3.4&#xff…

总经费8.4亿的上海市脑科学重大专项进展如何?且看2019年度工作汇报会

来源:复旦大学类脑智能科学与技术研究院12月23至24日,上海市“脑与类脑智能基础转化应用研究”市级科技重大专项2019年度工作汇报会在复旦大学召开。中国工程院原常务副院长、中国科学院院士、浙江大学教授潘云鹤,中科院脑科学与智能技术卓越…

bootstrap table 的简单Demo

暂时够用&#xff0c;不够用再补充 T_T script: <link rel"stylesheet" href"lib/bootstrap.min.css"> <!-- table css--> <link rel"stylesheet" href"lib/bootstrap-table.css"><script src"lib/jquery-1…

设计模式之——工厂模式

一、相关概念了解 首先知晓什么是工厂模式&#xff08;概念&#xff09;&#xff1f; ①实例化对象&#xff0c;用工厂方法代替new操作。②工厂模式包括工厂方法模式和抽象工厂模式。③抽象工厂模式是工厂方法模式的拓展。 其次明白工厂模式的意图 ①定义一个借口来创建对象&am…

吴恩达团队盘点2019AI大势:自动驾驶寒冬、NLP大跃进、Deepfake已成魔!

来源&#xff1a;新智元&#xff08;AI_era&#xff09;还有几天&#xff0c;我们就要和2019年说再见了。今年是AI从梦想变为现实的一年&#xff0c;从NLP到自动驾驶&#xff0c;从人脸识别到数据模拟&#xff0c;有哪些技术突破面世&#xff0c;又遭遇了哪些新的困难&#xff…

4怎么修边_亦木良品阻燃板怎么样

亦木良品阻燃板怎么样防火板_橱柜资料选择很重要美观耐用才是重点。橱柜资料1、防火板是由多层牛皮纸经酚醛树胶浸渍后与一层经浸渍的装饰纸在高温高压下压制而成&#xff0c;将防火板经冷压或热压在中密度板或刨花板上用作橱柜门板。普通防火板的耐磨、耐划、耐高温等性能要好…

QT:KeepAliveOption的应用

由于用QTcpSocket写网络通讯程序&#xff0c;当正常服务端或者客户端断开的时候&#xff0c;我们监测信号即可&#xff1a;Signals&#xff1a;stateChanged(QAbstractSocket::SocketState)。&#xff08;手动关闭网络连接&#xff0c;也会检测到断开&#xff09; 但是当若是有…

Science:2019年度最佳科学照片

来源&#xff1a;ScienceAAAS、DeepTech深科技摘要 《Science》杂志在 近日选出了在这一年中最受欢迎&#xff0c;也最具有视觉冲击力的照片。1、Weather above 天气之上摄影师、飞行员Santiago Borja在太平洋上空拍摄到的巨大雷暴。科学家希望知道这种风暴是否会将化学物质注…

多源异构数据_构建数字孪生城市的CIM数据平台哪家强?

文/王颖初 数字城市系统建设中数据领域存在的问题随着经济的发展和信息化水平的飞速提升&#xff0c;数字城市的系统建设也日益普及。数字城市涉及规划、建设、城市管理、国土、交通、水利、安防、人防、环境保护、文物保护、能源燃气等各大行业&#xff0c;及一切与智慧城市相…

behavior php,YII2框架中behavior行为的理解与使用方法示例

本文实例讲述了YII2框架中behavior行为的理解与使用方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;YII2中的行为说白了就是对组件功能的扩展&#xff0c;在不改变继承关系的条件下。行为附加到组件后&#xff0c;行为将注入自已的方法和属性到组件&#xff0c;可…