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 回答
14

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

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

于 2015-07-22T06:06:21.650 回答