JavaScript 学习笔记(九)call和apply方法


Posted in Javascript onJanuary 11, 2010

call和apply方法
call方法可改变上下文this指针,类似的方法还有apply,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1…这些做为参数传入。
举一个具体的例子

function add(a, b) { 
alert(a + b); 
} 
function sub(a, b) { 
alert(a - b); 
} 
add.call(sub, 3, 1);

这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
看一个稍微复杂一点的例子
function Class1() { 
this.name = "class1"; this.showNam = function() { 
alert(this.name); 
} 
} 
function Class2() { 
this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 
c1.showNam.call(c2);

注意,call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是:alert("class2");
另外可以用 call 来实现继承
function Class1() { 
this.showTxt = function(txt) { 
alert(txt); 
} 
} function Class2() { 
Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");

这样 Class2 就继承Class1了,Class1.call(this) 的 意思就是使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”);
这就是 javaScript 如何来模拟面向对象中的继承的,还可以实现多重继承。
function Class10() { 
this.showSub = function(a, b) { 
alert(a - b); 
} 
} function Class11() { 
this.showAdd = function(a, b) { 
alert(a + b); 
} 
} 
function Class2() { 
Class10.call(this); 
Class11.call(this); 
}

1.call方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj 可选项。将被用作当前对象的对象。
arg1, arg2, , argN 可选项。将被传递方法参数序列。
2.apply方法
应用某一对象的一个方法,用另一个对象替换当前对象。
apply([thisObj[,argArray]])
参数
thisObj 可选项。将被用作当前对象的对象。
argArray 可选项。将被传递给该函数的参数数组。

两者的区别
两者实现的功能是完全一样的,只是参数传递方式不一样,call是将各个参数以逗号(,)隔开,而apply是将所有参数组成一个数组进行传递。

Javascript 相关文章推荐
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
Jquery 绑定时间实现代码
May 03 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
js中的setInterval和setTimeout使用实例
May 09 Javascript
JavaScript toUpperCase()方法使用详解
Aug 26 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
理解Koa2中的async&await的用法
Feb 05 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
Jul 23 jQuery
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
ant design实现圈选功能
Dec 17 Javascript
取选中的radio的值
Jan 11 #Javascript
javascript Object与Function使用
Jan 11 #Javascript
Extjs学习笔记之九 数据模型(上)
Jan 11 #Javascript
JavaScript 事件冒泡简介及应用
Jan 11 #Javascript
Javascript 读书笔记索引贴
Jan 11 #Javascript
Javascript学习笔记9 prototype封装继承
Jan 11 #Javascript
Javascript学习笔记8 用JSON做原型
Jan 11 #Javascript
You might like
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
如何在PHP中生成随机数
2020/06/04 PHP
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
python如何判断IP地址合法性
2020/04/05 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
基于Python正确读取资源文件
2020/09/14 Python
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
Linux文件系统类型
2012/09/16 面试题
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
离婚财产分割协议书
2015/08/11 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
python tqdm用法及实例详解
2021/06/16 Python