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芯片的发展新态势、 技术演进及行业格局,旨在为业内相关企业把握行业发展动态、挖掘市场机遇,提供借鉴与参…

python队列怎么用_如何在Python中使用多处理队列? - python

我很难理解多处理队列如何在python上工作以及如何实现它。假设我有两个python模块,它们从共享文件中访问数据,我们将这两个模块称为writer和Reader。我的计划是让读取器和写入器都将请求放入两个单独的多处理队列中,然后让第三个进程将这些请…

php获取显示图书数据,php基于dom实现读取图书xml格式数据的方法

本文实例讲述了php基于dom实现读取图书xml格式数据的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;<?php $doc new DOMDocument();$doc->load( books.xml );$books $doc->getElementsByTagName( "book" );foreach( $books as $book ){$au…

codeforces problem 768B

这是第一篇博客&#xff1f;日志也行。。。codeforces problem 768B这个题做了很长时间--好几天吧&#xff0c;有空的时候就想怎么做。问题描述看 http://codeforces.com/problemset/problem/768/B看起来是个三叉树的题目。最开始我想用递归完成&#xff0c;遍历每一个节点&…

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

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

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

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

wpf 控件生成图片_EyeshotCAD控件生成以及作用

EyeshotCAD控件生成以及作用devDept Software是一家软件开发公司&#xff0c;成立于2006年&#xff0c;总部位于意大利博洛尼亚。 devDept Software是Microsoft .NET Framework的全球最大的CAD软件组件提供商。devDept SoftwareEyeshot的旗舰产品Eyeshot旨在满足CAD开发人员不断…

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

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

动态通过网络获取json来tabbar图片和文字或其他信息

动态通过网络获取json来tabbar图片和文字或其他信息转载于:https://www.cnblogs.com/TheYouth/p/6488843.html

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

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

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

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

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

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

四则运算01

编写随机生成30道小学数学题目&#xff1a; 源代码&#xff1a; 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")")…

oracle 取时间比较,Oracle最大日期获取方法

在开发应用中如何获取oracle的最大日期呢&#xff1f;本文将提供这样一个获取方法&#xff0c;需要的朋友可以参考下Sql代码复制代码 代码如下:-- Created on 2010/06/08 by NANdeclare-- Local variables hereTYPE t_test IS TABLE OF DATE INDEX BY BINARY_INTEGER;v_test t_…

python与sap_Python结合SAP GUI Script操作sap的简易教程

众所周知&#xff0c;如果要用Python做一些桌面WIN32应用的自动化工作&#xff0c;就需要用到著名的pywin32尤其是其中的win32com.client模块&#xff0c;pywin32的安装不能直接通过pip install方法&#xff0c;奉上pywin32的官方github链接&#xff1a;https://github.com/mha…

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

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

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

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

python装饰器用法_深入浅出分析Python装饰器用法

本文实例讲述了Python装饰器用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;用类作为装饰器示例一最初代码&#xff1a;class bol(object):def __init__(self, func):self.func funcdef __call__(self):return "{}".format(self.func())class ita(obje…

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

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

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

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