首页 > 技术文章 > call()函数、apply()函数区别与意义

Bideam 2016-06-14 00:02 原文

使用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对象的属性发生改变

 

推荐阅读