2010-06-25 45 views
9

我認爲我需要類似ruby的splat *這裏。Javascript:轉發函數調用的參數數量可變

function foo() { 
    var result = ''; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 

function bar() { 
    return foo(arguments) // this line doesn't work as I expect 
} 

bar(1, 2, 3); 

我想這回"123",而是我得到"[object Arguments]"。我想,這是有道理的。它傳遞的是表示參數的對象,而不是單獨的參數。

那麼,我該如何簡單地將任意數量的參數轉發給另一個接受任意數量參數的函數呢?

回答

19

爲了正確地傳遞參數到另一功能,則需要使用apply

function bar() { 
    return foo.apply(null, arguments); 
} 

apply方法採用兩個參數,第一是thisObj,它的值將被用作this值在調用的函數內部,如果使用nullundefined,函數內部的this值將引用全局對象。

apply期望的第二個參數是一個類似數組的對象,它包含要應用於該函數的參數。

檢查上述示例here

3

試試這個return foo.apply(this,arguments)。你也可以使用Array.prototype.slice.apply(arguments).join('')作爲你的foo功能。

相關問題