我刚看到一些我以前从未见过的东西,似乎无法找到它真正的解释......不在ES5.1标准和ES6草案中,也不在Mozilla ES6支持中。
请从技术上解释发生了什么(匿名对象,匿名阻止?),并提供一些ES标准中的部分或其他解释此内容的资源。
上下文是firefox扩展。
const // var also works here it seems
{
classes : Cc
, interfaces : Ci
, utils : Cu
} = Components
它在当前范围内创建变量Cc,Ci,Cu。这是一种反直觉,因为它看起来像一个匿名对象,但是人们会期望左侧的属性名称和右侧的值......
更新:感谢Leo,我发现了正确的词(解构)。我发现this blog很好地解释了它。
答案 0 :(得分:6)
这是ES6 Destructuring。更具体地说是Object Destructuring。
Components
应该是这样的:
{classes: 'asdf', interfaces: 'qwer', utils: `zxcv`}
然后你得到三个常量(用const
定义,在赋值后只读):
Cc // 'asdf'
Ci // 'qwer'
Cu // 'zxcv'
答案 1 :(得分:1)
作为the Mozilla documentation states:
通常的做法是缩写
Components.classes
和。{Components.interfaces
通过将对象的引用存储为 常数:
const Cc = Components.classes, Ci = Components.interfaces;
var os = Cc["@mozilla.org/observer-service;1"] .getService(Ci.nsIObserverService);
您在这里看到的是这种常见的做法,通过ES6对象解构进一步压缩。