ECAMScript3给Function的原型定义了两个方法,Function.prototype.call 和Function.prototype.apply。
区别仅在于传入的参数形式不同。
var func=function(a,b,c){ console.log([a,b,c]); } func.apply(null,[1,2,3]);//输出[1,2,3] func.call(null,1,2,3);//输出[1,2,3]
用法:
1、改变this指向。call和apply最常见的用途是改变函数内部的this指向。
var name="window" var obj1={ name:"obj1" }; var ob2={ name:"obj2" }; var getName=function(){ console.log(this.name); } getName();//window getName.call(obj1);//obj1 this指向obj1 getName.call(obj2);//obj2 this指向obj2
2、借用其他对象的方法
var A={ name:"小王", getName:function(){ console.log(this.name); } }; var B={ name:"丽丽" }; A.getName.call(B);