4

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

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

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

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

+1

Поскольку javascript 1.7 (в браузерах, основанных на gecko), функция van возвращает несколько значений, а левая часть в основном собирает 2 разных значения. Или хорошо, что я думаю, основываясь на документе, найденном здесь https://developer.mozilla.org/en/New_in_JavaScript_1.7. На этой странице показаны примеры как [a, b] = fn(); но я подозреваю, что это похоже на расширение FF. Прочитайте из заголовка «Назначение деструктуризации (слияние на собственную страницу/раздел)» – GillesC

+0

см. Также каноническое [Обозначение скобки объекта Javascript с левой стороны для назначения] (http://stackoverflow.com/q/26999820/1048572) – Bergi

ответ

5

Это destructuring assignment, что-то, что в настоящее время реализовано только механизмом 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; 

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

+0

Теперь я знать * имя * для этого :) –

Смежные вопросы