日期:2014-05-16  浏览次数:20447 次

this.fun.apply(this,args)的问题
大家好,小弟刚入门,看书的时候偶然发现这么一句话,便感觉到非常疑惑,可能是小弟理解有问题:

fun.apply(obj,b)的作用就是让被调用的函数fun的this指向obj,但是这句话里fun函数本来就属于this,如果这样调用“this.fun(args)”也能够达到相同的效果,为什么要使用apply呢?
javascript

------解决方案--------------------
其实你已经知道apply的功能了,就是用来改变主体this
例:
obj1={msg:1};
obj2={msg:2};
function show(){ alert( this.msg ) }
show.apply(obj1);
show.apply(obj2)






------解决方案--------------------


var obj1 = {
  name : 'obj1 name'
} , obj2 = {
  name : 'obj2 name'
} , name = 'window name';
function applyDemo(){
  alert(this==obj1);
  alert(this==obj2);
  alert(this==window);
  alert(this.name);
}
applyDemo();//this默认指向window对象
applyDemo.apply(obj1);//用apply改变作用域,使this指向obj1
applyDemo.apply(obj2);//用apply改变作用域,使this指向obj2


运行上面一段代码应该就明白了吧,和apply功能类似的还有一个call,它们两者的区别就是传参方面,apply接受一个数组,call接收不是。
------解决方案--------------------
this.fun.apply(this,args)和this.fun
如果这两个地方的this相等,就是等价的