2014-02-23 34 views
2

我有一個函數,在Javascript使用Javascript:解包對象作爲函數參數

function asd(foo, bar, baz) { 
    // ... 
} 

而且每個的那些3個參數是必需的。

假設我有分組爲對象的參數:

var x = { 
    foo: 10, 
    bar: 20, 
    baz: 30 
}; 

我可以調用asd只是通過給物體x有點「解包」?這可以做到一般嗎?即不知道asd的簽名。

我在尋找類似kwargs在Python拆包:

def asd(foo, bar, baz): 
    # ... 

kwargs = {'foo': 10, 'bar': 20, 'baz': 30} 
asd(**kwargs) 

A 「不,不可能的」 的答案是可以接受的。我只是想知道這是否可能在JavaScript中。

+0

有沒有內置的方式來做到這一點。你可以寫一個函數來做到這一點。 *編輯*實際編寫函數會有問題,因爲JavaScript不會對對象的屬性施加特定的排序。 – Pointy

+0

這樣的功能可以。但是如何? –

+2

這樣的? http://stackoverflow.com/questions/5453636/how-can-i-unpack-an-object-into-a-functions-scope – James

回答

1
function asd(foo, bar, baz) { 
    console.log(foo, bar, baz); 
} 

var x = { 
    foo: 10, 
    bar: 20, 
    baz: 30 
}; 

var args = []; 
for(var i in x){ 
    args.push(x[i]); 
} 
asd.apply(window, args); 

但是,像其他人一樣,訂貨是一個問題。在for中,按照它們定義的順序獲取屬性。如果這就是你想要的,那麼這個解決方案可以爲你工作。但按名稱映射參數是不可能的。

相關問題