2013-02-13 65 views
13

我在Firefox addon-sdk中看到很多例子,它在聲明一個變量時使用下面的樣式。爲什麼在javascript中使用var {VariableName} = require('')?

var { Hotkey } = require("sdk/hotkeys"); 

它使什麼區別與var { Hotkey }比使用var HotKey?爲什麼使用額外的花托?

+0

自己也不知道,但是這可能對你有一些信息:http://stackoverflow.com/questions/4445496/curly-bracket-variable-in-javascript – CodeMoose 2013-02-13 07:19:36

回答

14

這是destructuring assignment

var {Hotkey} = require('sdk/hotkeys'); 

等同於:

var Hotkey = require('sdk/hotkeys').Hotkey; 

也看到了harmony:destructuring建議,其中包括下面的例子:

// object destructuring 
var { op: a, lhs: b, rhs: c } = getASTNode() 

// digging deeper into an object 
var { op: a, lhs: { op: b }, rhs: c } = getASTNode() 
+0

我熟悉來自CoffeeScript的概念:http://coffeescript.org/#destructuring。我相信ECMAScript可能採用類似的東西(這就是爲什麼它可能已經出現在Firefox附加組件中)。 – davidchambers 2013-02-13 07:24:17

+0

謝謝。破壞任務聽起來很有趣。但是,在您指向的文檔鏈接中,我沒有看到類似的例子,例如'var {Hotkey} = require('sdk/hotkeys');'。 – 2013-02-13 08:22:55

+2

'var {op:a} = getASTNode()'等同於'var a = getASTNode()。op'。 「:」左側的標記是屬性名稱,「:」右側的標記是變量名稱。然而,通常情況下,我們希望在這兩種情況下使用相同的名稱,例如'var {Hotkey:Hotkey} = require('sdk/hotkeys')'。因爲這是一種常見模式,所以有一個簡寫:var {Hotkey} = require('sdk/hotkeys')'。 – davidchambers 2013-02-13 09:15:15

相關問題