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 相关文章推荐
JS保存、读取、换行、转Json报错处理方法
Jun 14 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
使用Promise解决多层异步调用的简单学习心得
May 17 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
js实现开启密码大写提示
Dec 21 Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
Jul 31 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
Feb 26 Javascript
JS如何监听div的resize事件详解
Dec 03 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编写PDF文档生成器
2006/10/09 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
react-navigation之动态修改title的内容
2018/09/26 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
C#面试常见问题
2013/02/25 面试题
采购主管工作职责
2013/12/12 职场文书
英语简历自我评价
2014/01/26 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
师范生求职信
2014/06/14 职场文书
法学专业求职信范文
2015/03/19 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书