JavaScript注释

Pau*_*est 40 javascript annotations

是否有JavaScript注释?

当然JavaScript没有它们,但是有其他库或建议的语言扩展,例如

@type {folder.otherjsmodule.foo}
function(){
    foo = folder.otherjsmodule.foo();
    ...
    return foo;
};
Run Code Online (Sandbox Code Playgroud)

Ben*_*aum 30

更新:现在存在一个适用于JavaScript的装饰器的提议.它目前是第1阶段,您可以在BabelJS和traceur中使用它.


有几个库,比如前面提到的闭包在注释中使用注释,闭包编译器甚至可以在编译时尽可能多地断言类型.然而,这些并不是传统意义上的实际"注释".

与"明显"的答案不同 - 是的,有JavaScript注释,有些运行时支持它们.

例如

(function(){
    "use strict";
    //code in strict mode
})();
Run Code Online (Sandbox Code Playgroud)

这将导致函数内部执行严格的模式.最近在Mozilla我们得到了:

(function(){
    "use asm";
    //code in asmjs
})();
Run Code Online (Sandbox Code Playgroud)

这将导致代码以asmjs模式运行,优化进行转换.

我可以在我的库中使用这些注释吗?

是的,虽然面向方面的编程和注释在JS中非常罕见,但完全可以编写一个接受函数的库,查看它.toString,找出这些注释的结束位置并执行相关代码然后执行函数的其余部分.

例如

an(function(){
    "validate user"; // this could be something you implement yourself
    "use strict";
})();
Run Code Online (Sandbox Code Playgroud)

创建一个执行此操作的库非常简单,它需要一些讨厌的代码(使用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
});
Run Code Online (Sandbox Code Playgroud)

  • "use strict"就像被称为编译器指令一样. (3认同)

Chr*_*ian 12

我知道这是旧的.但ES2016提供了装饰器(在Javascript中称为装饰器).很容易制作自己的装饰器,或者你可以扩展我的装饰模块,让你轻松包装/注入你的自定义代码.

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