Как разрешить ключевое слово «@» в Javascript

Я пытаюсь разрешить функции '@' в своем приложении, что я должен добавить или вставить, чтобы JS мог его интерпретировать, точно так же, как «angular2 @Component».


person Jasdev Sidhu    schedule 29.08.2017    source источник
comment
Непонятно, что вы пытаетесь сделать. Вы хотите реализовать свой собственный декоратор?   -  person Yury Tarabanko    schedule 29.08.2017


Ответы (2)


@ используется как декоратор в новой предлагаемой функции для JavaScript. Чтобы использовать его, вам нужно использовать препроцессор, такой как Babel. Он также доступен в машинописном формате и широко используется в Angular2. Пример:

function myDecorator(value) {
   return function(target) {
      target.myProperty = value;
   }
}

@myDecorator('myValue')
class MyClass { }

Декораторы не будут работать в Babel по умолчанию, вы можете найти информацию о том, как их включить здесь .

Правка: независимо от того, считаете ли вы @myDecorator('myValue') @ частью имени функции или нет, я думаю, мы все можем признать, что это будет выглядеть так для тех, кто плохо знаком с языком.

Ссылки по теме:

https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841 https://cabbageapps.com/fell-love-js-decorators/

person Philip Kirkbride    schedule 29.08.2017
comment
В ES6 не появились декораторы. Это всего лишь предложение, но они являются частью TypeScript - person str; 29.08.2017
comment
Пожалуйста не распространяйте дезинформацию. Декораторы — это предложение, они не являются частью какой-либо конкретной версии спецификации ECMAScript. Сказать, что они ES6, — это 100% ложь. - person loganfsmyth; 29.08.2017
comment
Ложь целенаправленна и злонамеренна, а это не так. Из того, что я читал, можно использовать декораторы с babel и более поздней версией ES. Если у вас есть более точный ответ, напишите. @loganfsmyth - person Philip Kirkbride; 29.08.2017
comment
Справедливо, не имел в виду, что это было целенаправленно, извините. Это просто расстраивает, потому что это распространенное заблуждение, которое здесь часто распространяется. ES6 (ES2015) — это особая версия спецификации, вышедшая 2 года назад. Если бы там были декораторы, вы могли бы использовать их в большинстве JS-сред без Babel. Тот факт, что вам нужен Babel для использования функции, обычно означает, что это предложение, а не в какой-либо версии ES * или совсем недавно было добавлено в официальную спецификацию. - person loganfsmyth; 29.08.2017
comment
@loganfsmyth для ES2017, вы знаете, это стандартная функция или все еще предложение? - person Philip Kirkbride; 29.08.2017

Согласно валидатору имени переменной для JavaScript, @ это:

недействительный идентификатор в соответствии с ECMAScript 6/Unicode 8.0.0

И поэтому он недействителен и для имен функций. См. также: Какие символы допустимы для имен переменных JavaScript? В Angular вы фактически используете TypeScript, и они используют @ в качестве декоратора функции, но он не используется в имени функции.

person Michael Troger    schedule 29.08.2017