为什么在javascript中要使用var { VariableName } = require('')?

13

我在Firefox的addon-sdk中看到了很多示例,当声明变量时会使用下面的样式。

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

相较于使用var HotKey,使用var { Hotkey }有什么不同之处?为什么要使用额外的花括号?


我不知道,但这个链接可能会对你有所帮助:https://dev59.com/zlLTa4cB1Zd3GeqPcarh - CodeMoose
1个回答

14

这是解构赋值

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()

我熟悉CoffeeScript中的这个概念:http://coffeescript.org/#destructuring。我相信ECMAScript可能会采用类似的东西(这就是为什么它可能已经出现在Firefox附加组件中的原因)。 - davidchambers
谢谢。解构赋值听起来很有趣。然而,在您指向的文档链接中,我没有看到类似于 var {Hotkey} = require('sdk/hotkeys'); 的示例。 - Navaneeth K N
2
var {op: a} = getASTNode() 等价于 var a = getASTNode().op。":"左边的标记是属性名称,":"右边的标记是变量名称。不过,通常情况下,人们希望在两种情况下使用相同的名称,例如var {Hotkey: Hotkey} = require('sdk/hotkeys')。由于这是一个常见的模式,因此有一种简写方式:var {Hotkey} = require('sdk/hotkeys') - davidchambers
解构在Mozilla的增强版JS中已经存在很长时间了 - JS有许多特定于Mozilla的扩展,如数组推导和生成器,这些扩展也正在被引入到Harmony中。 - therealjeffg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接