apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:
比如:
var foo = {
a:function(){
this.destroy(); // 这里的this就是对应的对象;
},
b:{
fn:function(){
var self = this;
foo.a.apply(this, []); // 这里的this是指像fn对象
return foo.a;
},
destroy:function(){
alert('destroyed~');
}
}
}
foo.b.fn();
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
从 函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的 方法运行的目的。两个方法除了thisArg参数,都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式:
loading