JS的call与apply的用法

时间:2022-05-06 07:18:28

call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的,而apply传的剩余值必须为数组。

个人认为调用有两种情况:

一:当对象来调用call方法时;第一个参数用于覆盖。如A.call(B,arguments);是用A对象替换掉B对象,意思基本是说将arguments参数传入A对象来执行;例如:

function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
} add.call(sub,3,1);//输出结果为4;

二:当某个对象的方法来调用call方法时;如:A.showTime.call(B,aruments);意思是将A对象的showTime方法复制给B对象,B对象中也有了showTime方法;arguments参数传入给B对象;

function Animal(){
this.name = "Animal";
this.showName = function(){
alert(this.name);
}
} function Cat(){
this.name = "Cat";
} var animal = new Animal();
var cat = new Cat(); //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。
//输入结果为"Cat"
animal.showName.call(cat,",");
//animal.showName.apply(cat,[]);

注:例子来源于其他帖子;详细请看http://uule.iteye.com/blog/1158829;