2013-02-13 4 views
13

Ho visto molti esempi in Firefox addon-sdk che utilizza lo stile sottostante quando si dichiara una variabile.Perché usare var {VariableName} = require ('') in javascript?

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

che differenza fa con var { Hotkey } che usare var HotKey? Perché vengono utilizzate le parentesi di fiore in più?

+0

non lo so io, ma questo potrebbe avere alcune informazioni per voi : http://stackoverflow.com/questions/4445496/curly-bracket-variable-in-javascript – CodeMoose

risposta

14

Questo è destructuring assignment.

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

è equivalente a:

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

Vedi anche il harmony:destructuring proposta, che include i seguenti esempi:

// 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

Ho familiarità con il concetto di CoffeeScript: http://coffeescript.org/#destructuring. Credo che ECMAScript possa adottare qualcosa di simile (motivo per cui potrebbe essere già presente nei componenti aggiuntivi di Firefox). – davidchambers

+0

Grazie. Distruggere il compito sembra interessante. Tuttavia, non vedo un esempio simile come 'var {Hotkey} = require ('sdk/hotkeys');' nel link alla documentazione che hai indicato. –

+2

'var {op: a} = getASTNode()' è equivalente a 'var a = getASTNode(). Op'. Il token a sinistra di ":" è il nome della proprietà e il token alla destra di ":" è il nome della variabile. Spesso, però, si vuole usare lo stesso nome in entrambi i casi, come in 'var {Hotkey: Hotkey} = require ('sdk/hotkeys')'. Poiché questo è uno schema comune, esiste una scorciatoia: 'var {Hotkey} = require ('sdk/hotkeys')'. – davidchambers