使用apply函数或call函数的意义:
在面对对象编程过程中,当A对象调用其他对象而非A对象方法是,该方法中所有的this引用都指向此方法所在的对象,而不是当前代码的上下文即A对象,
为了保持this的原来的指向(即A对象),则需要使用apply或call函数。
apply()和call()的区别:
apply和call,它们的作用都是将函数绑定到另外一个对象上去运行
原型分别是
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg,[arg1],[arg2…]]);
从中可以看出,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,使得另外一个对象实例传入函数。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
而区别就在于第二个参数,apply()函数使用数组形式传入数值,call()函数以自由形式直接传入多个数值。
示例:
function Accomodation(){
this.isAlarmed=false;
}
var AlarmSystem={
arm:function(message){
this.isAlarmed=true;
alert(message);
},
disarm:function(message){ this.isAlarmed=false; alert(message); }};
var myHouse = new Accomodation();
AlarmSystem.arm.call(myHouse,"Alarm activated");
alert(myHouse.isAlarmed); //true arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变
AlarmSystem.disarm.apply(myHouse,["Alarm activated"]);
alert(myHouse.isAlarmed); //flase arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变