js中apply和call改变this指针指向
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2014-08-24 08:33:37
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
这两个函数有时候看得越多越是搞的混淆啦下面记录一个理解的方法
apply和call的功能差不多是一样的但是他的参数列表不一样
Function.apply(obj,args)方法能接收两个参数 //obj:这个对象将代替Function类里this对象 //args:这个是数组,它将作为参数传给Function(args-->arguments) Function.call(obj,[param1[,param2[,…[,paramN]]]]) //obj:这个对象将代替Function类里this对象 //params:这个是一个参数列表使用示例
function a(){ this.name='aname'; } function b(){ this.name='bname'; this.c=function(){ alert(this.name); } } var bb=new b; var aa=new a; bb.c(); bb.c.apply(aa);
看上面示例两个构造器a ,b 都有一个同名的变量 b中有一个函数弹出name变量的值
bb.c()//会输出bname
bb.c.apply(aa)//则会输出aname
原因呢 因为apply的作用就是用一个对象(this)来替换另一个对象(this)
上面首先调用bb对象的c方法然后开始替换this指针 用aa的对象指针替换掉bb的对象指针这样输出的时候就变成aname啦