4

最近,我一直在寻找到Firefox Add-on Builder SDK源,无意中发现了这样的常量声明:与块常量声明

const { getCodeForKey, toJSON } = require("../../keyboard/utils"); 

我能找到的有关CommonJS Modules,但这项任务的左侧部分稍微让我困惑,因为它必须是语言特定的,并且我不能在Google上做任何事情。

有人能指点我的一些规范/草案来解释这里发生了什么吗?

+1

由于JavaScript 1.7(在基于壁虎的浏览器中)函数van返回多个值,左边的部分基本上收集2个不同的值。或者,我认为这是基于https://developer.mozilla.org/en/New_in_JavaScript_1.7的文档。在那个页面上,他们显示的例子是[a,b] = fn();但我怀疑它与FF扩展中的相似。阅读标题“解构赋值(合并到自己的页面/部分)” – GillesC 2012-04-17 21:30:57

+0

另请参阅规范[JavaScript对象括号符号在左侧分配](http://stackoverflow.com/q/26999820/1048572) – Bergi 2016-02-15 18:30:39

回答

5

这是一个destructuring assignment,目前只能通过Firefox使用的SpiderMonkey JavaScript引擎实现。下面是它的工作原理与阵列:

// Destructuring assignment 
[a, b] = foo; 

// Equivalent code 
a = foo[0]; 
b = foo[1]; 

,这里是它如何使用对象:

// Destructuring assignment 
{a, b} = foo; 

// Equivalent code 
a = foo.a; 
b = foo.b; 

一个稍微复杂的例子:

// Destructuring assignment 
{name: a, address: {line1: b}} = foo; 

// Equivalent code 
a = foo.name; 
b = foo.address.line1; 

所以,你的代码示例相当于到:

var utilsExports = require("../../keyboard/utils"); 
const getCodeForKey = utilsExports.getCodeForKey; 
const toJSON = utilsExports.toJSON; 

这只是一个更方便的写法。

+0

现在我知道它*的名称:) – 2012-04-18 12:31:43