Подтвердить что ты не робот

Аннотации JavaScript

Есть ли аннотации JavaScript?

Конечно, JavaScript их не имеет, но есть ли дополнительные библиотеки или предлагаемое расширение языка, например

@type {folder.otherjsmodule.foo}
function(){
    foo = folder.otherjsmodule.foo();
    ...
    return foo;
};
4b9b3361

Ответ 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
});

Ответ 2

Я знаю, что это старо. Но ES2016 предоставляет декораторы (это называется декораторами в Javascript). Легко сделать свои собственные декораторы, или вы можете расширить мой модуль декоратора, который позволит вам легко обернуть/ввести свой собственный код.

https://github.com/cmartin81/decorator-wrap