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

Can you explain this JavaScript syntax (variable extrapolation)?

本文关键字:变量 语法 JavaScript 能解释 一下      更新时间:2023-09-26

我只是看到了一些我以前从未见过的东西,似乎找不到它到底是什么的解释......不在 ES5.1 标准和 ES6 草案中,也不在 Mozilla ES6 支持中。

请在技术上解释正在发生的事情(匿名对象,匿名块?),并提供一些参考ES标准中的部分或其他一些资源来解释这一点。

上下文是一个火狐扩展。

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

更新:多亏了狮子座,我找到了合适的词(解构)。我发现这个博客解释得很好。

这是

ES6 解构。更具体地说,对象解构

Components应该是这样的:

{classes: 'asdf', interfaces: 'qwer', utils: `zxcv`}

然后你得到三个常量(用 const 定义,赋值后是只读的):

Cc // 'asdf'
Ci // 'qwer'
Cu // 'zxcv'

正如 Mozilla 文档所述:

通常

的做法是缩写Components.classesComponents.interfaces,将对对象的引用存储为 不断:

const Cc = Components.classes, Ci = Components.interfaces;

var os = Cc["@mozilla.org/observer-service;1"] .getService(Ci.nsIObserverService);

你在这里看到的是这种常见的做法,通过 ES6 对象解构进一步压缩。