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到第二個等等。

相關問題