2013-02-13 51 views
13

Tôi đã thấy nhiều ví dụ trong Firefox addon-sdk sử dụng kiểu dưới đây khi khai báo biến.Tại sao sử dụng var {VariableName} = require ('') trong javascript?

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

Điều gì khác biệt với var { Hotkey } so với sử dụng var HotKey? Tại sao các dấu ngoặc hoa phụ được sử dụng?

+0

Không biết bản thân mình, nhưng điều này có thể có một số thông tin cho bạn : http://stackoverflow.com/questions/4445496/curly-bracket-variable-in-javascript – CodeMoose

Trả lời

14

Đây là destructuring assignment.

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

tương đương với:

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

Xem thêm các harmony:destructuring đề nghị, trong đó bao gồm các ví dụ sau:

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

Tôi quen thuộc với khái niệm này từ CoffeeScript: http://coffeescript.org/#destructuring. Tôi tin rằng ECMAScript có thể áp dụng một cái gì đó tương tự (đó là lý do tại sao nó có thể đã xuất hiện trong các add-on của Firefox). – davidchambers

+0

Cảm ơn. Nhiệm vụ chuyển cấu trúc âm thanh thú vị. Tuy nhiên, tôi không thấy một ví dụ tương tự như 'var {Hotkey} = require ('sdk/hotkeys');' trong liên kết tài liệu mà bạn đã trỏ tới. –

+2

'var {op: a} = getASTNode()' tương đương với 'var a = getASTNode(). Op'. Mã thông báo bên trái của dấu ":" là tên thuộc tính và mã thông báo ở bên phải của dấu ":" là tên biến. Tuy nhiên, thông thường, người ta muốn sử dụng cùng tên trong cả hai trường hợp, như trong 'var {Hotkey: Hotkey} = require ('sdk/hotkeys')'. Bởi vì đây là một mẫu phổ biến, có một cách viết tắt: 'var {Hotkey} = require ('sdk/hotkeys')'. – davidchambers

Các vấn đề liên quan