4

闭包编译器是否有一种简单的方法能够导出一个类及其所有原型和静态方法并将名称保留为公共 API?默认情况下,高级选项会重命名所有变量,但您可以将内容导出到全局范围,例如:

window['MyClass'] = MyClass;

但是,这只会将 MyClass 导出到全局范围,所有原型和静态方法都被重命名。有人会认为您可以遍历原型并导出它们,但不:

for (var i in MyClass.prototype) {
    window['MyClass'].prototype[i] = MyClass.prototype[i];
}

这不起作用。我知道的唯一方法是像这样手动添加它们:

window['MyClass'].prototype['myFunction'] = MyClass.prototype.myFunction;

我想公开大约 50 个原型,所以这种方法不是首选。有谁知道如何以方便的方式导出整个班级?

4

2 回答 2

1

查看 JavaScript 样式指南中记录的 @export 注释:http: //google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml ?showone=Comments#Comments

于 2011-02-14T17:39:58.197 回答
1

您所描述的实际上是 externs 的用途: 防止 Google Closure Compiler 重命名设置对象

您可以在此处查看大型 externs 文件的示例: http ://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.6.js

您可以省略所有评论,只使用以下语句:

jQuery.prototype.add = function(arg1, context) {};

确保不重命名 add 方法。您确实需要在 externs 文件的注释中包含 @externs 或将其作为 --externs 传递给 Closure Compiler 以使事情正常工作。

于 2011-10-19T23:04:50.600 回答