很多人会在读别人的源码的时候会经常看到call 和apply方法,但是对两个方法的认识却说不清,比如jquery ext.js 等等一些开源的框架中都用到了类似的写法,我个人对此做如下总结:
call方法和apply方法主要是用在,本对象需要调用其他对象的方法的时候使用,而在java中我们通常都是会使继承的方式然后重新写父类的方法之后再使用本类来调用此方法,而在javascript中则不需要。 那么着两个方法中到底有什么区别呢,其最大的区别就在于传递的参数类型不同call不需要传递数组,而apply的参数传递必须使用数组的方式
function Truck(){
this.name="东风";
this.price=120000;
this.move=function(price){
alert(this.name+" moving 它的价格是:"+price);
};
};
function Car(){
this.name="上海大众";
this.price=200000;
};
var trunk = new Truck();
var car = new Car();
// trunk.move.call(car,12345);trunk.move.call(car,[12345]);//参数可以是数组也可以不是
// 正确:
trunk.move.apply(car,[12345]);
//错误 :
trunk.move.apply(car,12345);
//apply参数必须传递为数组否则出先如下错误:
//Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type