Объявление константы с блоком

Недавно я просматривал источники Firefox Add-on Builder и наткнулся на такие объявление констант:

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

Я мог бы найти информацию о модулях CommonJS, но левая часть этого задания меня немного смущает, так как это должно быть специфично для языка, и я ничего не мог погуглить по этому поводу.

Может ли кто-нибудь указать мне на какую-то спецификацию/черновик, объясняющий, что здесь происходит?


person Nash Bridges    schedule 17.04.2012    source источник
comment
Начиная с javascript 1.7 (в браузерах на основе gecko) функция van возвращает несколько значений, а левая часть в основном собирает 2 разных значения. Или это то, что я думаю, основываясь на документе, найденном здесь developer.mozilla.org/en/New_in_JavaScript_1.7 . На этой странице они показывают примеры как [a, b] = fn(); но я подозреваю, что это похоже на расширение FF. Прочитать из заголовка Задание по деструктуризации (Объединить в собственную страницу/раздел)   -  person GillesC    schedule 18.04.2012


Ответы (1)


Это назначение деструктурирования, которое в настоящее время реализовано только в JavaScript SpiderMonkey. движок, который используется Firefox. Вот как это работает с массивами:

// 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;

Это просто более удобный способ написать это.

person Wladimir Palant    schedule 18.04.2012