Ответ 1
Обновить. В настоящее время существует предложение для правильных декораторов в JavaScript. Это в настоящее время этап 1, и вы можете использовать его в BabelJS и traceur.
В нескольких библиотеках, подобных упомянутым перед закрытием, используются комментарии в комментариях, компилятор закрытия даже утверждает типы столько, сколько они могут во время компиляции. Однако это не настоящие "аннотации" в классическом смысле.
В отличие от "очевидного" ответа - Да, есть аннотации JavaScript, некоторые из них поддерживают их.
Например
(function(){
"use strict";
//code in strict mode
})();
Это вызовет строгое выполнение режима внутри функции. Совсем недавно в Mozilla мы получили:
(function(){
"use asm";
//code in asmjs
})();
Это приведет к тому, что код будет запущен в режиме asmjs, оптимизируя процесс пересылки.
Могу ли я использовать эти аннотации в своей библиотеке?
Да, хотя аспектно-ориентированное программирование и аннотации широко распространены в JS, вполне возможно написать библиотеку, которая принимает функцию, смотрит на ее .toString
, вычисляет, где такие аннотации заканчиваются и выполняет соответствующий код, а затем остаток функции.
Например
an(function(){
"validate user"; // this could be something you implement yourself
"use strict";
})();
Создание библиотеки, которая делает это довольно просто, потребовалось бы немного неприятного кода (с использованием конструктора Function и разбора функции как строки), но это, безусловно, возможно. Он даже отлаживается в новых dev-инструментах и почти так же быстро, как и нативная функция.
Предлагаемый синтаксис может быть:
an.add("assertEmail",function(x){
if(!emailRegex.test(x){
throw new Error("Invalid call to function - expected email got",x);
}
});
// later on
an(function subscribeToNewsLetter(x){
"assertEmail";
var xhr = new XMLHttpRequest();
//send email
});