45

JavaScript アノテーションはありますか?

もちろんJavaScriptにはありませんが、追加のライブラリや提案された言語拡張機能はありますか?

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

2 に答える 2

33

更新: 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 コンストラクターを使用し、関数を文字列として解析する) 厄介なコードが必要になりますが、それは確かに可能です。新しい開発ツールでデバッグすることもでき、ネイティブ関数とほぼ同じくらい高速です。

提案された構文は次のようになります。

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
});
于 2013-07-09T23:58:14.570 に答える