2011-07-24 169 views
7

我有兩個功能的()和b(),兩者都是可變參數的功能,讓我們說,當我呼叫功能的()是這樣的:在Javascript中使用可變參數函數調用可變參數函數?

a(arg0, arg1, arg2, arg3, ...., argn); 

那麼函數B()將被內部稱爲以及一(),但沒有一個()的參數列表中的第一個參數「arg0都」:

b(arg1, arg2, arg3, ...., argn); 

有什麼辦法呢?

+1

相關:http://stackoverflow.com/questions/960866/converting-the-arguments-object-to-an-array-in-javascript –

回答

20

每個JavaScript function實際上只是另一個「對象」(JavaScript的意義上的對象),並且帶有一個apply方法(請參閱Mozilla's documentation)。因此,你可以做這樣的事情....

b = function(some, parameter, list) { ... } 

a = function(some, longer, parameter, list) 
{ 
    // ... Do some work... 

    // Convert the arguments object into an array, throwing away the first element 
    var args = Array.prototype.slice.call(arguments, 1); 

    // Call b with the remaining arguments and current "this" 
    b.apply(this, args); 
} 
+0

酷,我剛剛做了一個快速測試,它工作正常。謝謝你的幫助! – Teiv