2015-02-25 2 views
3

Я использую Google Closure Compiler, и я получаю следующее сообщение об ошибке:ES6 не поддерживается в Closure Compiler

ES6_FEATURE: this language feature is only supported in es6 mode: computed property. Use --language_in=ECMASCRIPT6 or ECMASCRIPT6_STRICT to enable ES6 features.

Строка, которая вызывает эту ошибку, это одна:

var TheCellRef = LeadImport2ExcelLibrary['utils']['encode_cell']({ ['c']: C, ['r']: R }); 

В основном Я передаю объект, который я создаю в той же строке. Я знаю, что могу просто добавить поддержку ES6 в исходный заголовок JavaScript, но мне было интересно, почему эта ошибка подходит и как ее исправить?

+0

Что является то, что код должен делать? Устные переводчики pre-ecmascript 6 считали бы, что вы используете массивы как объектные ключи, которые недействительны. – JJJ

+1

Э-э? Он говорит об этом прямо в сообщении: * «эта языковая функция поддерживается только в режиме es6: ** вычисленное свойство **» * Вы используете вычисленные свойства, являющиеся функцией ES6. Возможное решение - не использовать рассчитанные свойства. Тем не менее, мне действительно интересно, почему вы использовали '{['c']: C, ...}', если вы, похоже, не знаете об этой функции? –

+0

@FelixKling: это потому, что я использую GCC для генерации клиентских файлов динамически, и поскольку у меня нет extern для библиотеки, которую я использую (SheetJS.js), мне нужно убедиться, что GCC не переименовывает объектные ключи и способ сделать это - использовать нотацию объектной строки вместо обозначения точки объекта. Вот почему {c: C, r: R} не работает, потому что после компиляции c и r будут переименованы, но ['c'] и ['r'] преобразуются в точечную нотацию, так что библиотека может получить объект, который он ожидает. – frenchie

ответ

5

Это потому, что вы используете Computed Property Names в прямом объекте:

{ ['c']: C, ['r']: R } 

ES5 совместимая замена может быть:

var TheCellRef = LeadImport2ExcelLibrary['utils']['encode_cell']({ "c": C, "r": R }); 
+3

Или просто' {c: C, r: R} '. –

+0

@FelixKling Кавычки необходимы для имен свойств для блокировки переименования. –

+0

@ChadKillingsworth: зависит от того, как скомпилирован код, но, похоже, это так, да. –

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