2011-09-30 43 views
2

是否有一种将所有参数从一个函数传递到另一个函数并发送this的简单方法。.call和.apply之间的区别

我已经试过这样:http://jsfiddle.net/v92Xr/

var f1 = function() { 
    f2.call(this, arguments); 
}; 
var f2 = function() { 
    console.log(arguments); 
}; 
f1("abc", "def", "hij"); 

,但它让我所有从f1参数被堆放在F2参数0:

f2->arguments[0] == f1->arguments 

好吧,当我运行apply方法来代替它作品:http://jsfiddle.net/v92Xr/1/

var f1 = function() { 
    f2.apply(this, arguments); 
}; 
var f2 = function() { 
    console.log(arguments); 
}; 
f1("abc", "def", "hij"); 

所以任何人都可以请告诉我callapply之间有什么区别?

回答

4

我觉得你刚刚发现自己的差异。

call与您通常调用函数的方式几乎完全相同,除了参数列表的起始处有一个额外的参数,您可以在其中放置对象this的引用。

apply也具有第一个参数作为this对象,但第二个参数预计为数组。该数组用于提供被调用函数所期望的所有参数。元素0映射到函数参数列表中的第一个参数,元素1到第二个等等。