你能解释一下这个JavaScript语法(变量外推)吗?

时间:2014-12-26 03:24:07

标签: javascript

我刚看到一些我以前从未见过的东西,似乎无法找到它真正的解释......不在ES5.1标准和ES6草案中,也不在Mozilla ES6支持中。

请从技术上解释发生了什么(匿名对象,匿名阻止?),并提供一些ES标准中的部分或其他解释此内容的资源。

上下文是firefox扩展。

const // var also works here it seems
{
      classes    : Cc
    , interfaces : Ci
    , utils      : Cu

} = Components

它在当前范围内创建变量Cc,Ci,Cu。这是一种反直觉,因为它看起来像一个匿名对象,但是人们会期望左侧的属性名称和右侧的值......

相关构造的来源:https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/JavaScript_Object_Management

更新:感谢Leo,我发现了正确的词(解构)。我发现this blog很好地解释了它。

2 个答案:

答案 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对象解构进一步压缩。