我有一堆互相继承的 JavaScript 原型(prototype)。每个类都在自己的文件中定义,如下所示。示例文件如下所示:
goog.provide("app.classes.ClassA");
(function() {
app.classes.ClassA = function() {
// constructor
}
app.classes.ClassA.prototype.example = function() {
// example method
}
})();
第二个文件可能如下所示:
goog.provide("app.classes.ClassB");
goog.require("app.classes.ClassA");
(function() {
app.classes.ClassB = function() {
// constructor
}
goog.inherits(app.classes.ClassB, app.classes.ClassA);
app.classes.ClassB.prototype.example = function() {
// example method
}
})();
运行编译器后,第一个文件中指定的代码如下所示:
goog.provide("app.classes.ClassA");
(function() {
a.classes.ClassA = function() {
// constructor
}
a.classes.ClassA.prototype.example = function() {
// example method
}
})();
ClassA 中的“app”已被替换为单个“a”,并且 goog.inherits 无法找到 app.classes.ClassA,因为它未定义。
如何防止闭包编译器重命名这样的命名空间?
谢谢!
最佳答案
有两种方法,首先你可以用 @expose 注释你的外部方法/变量/类:
(function() {
/**
* @expose
*/
a.classes.ClassA = function() {
// constructor
}
a.classes.ClassA.prototype.example = function() {
// example method
}
})();
或者,您可以在运行闭包编译器时禁用优化:
java -jar ccompiler.jar --compilation_level WHITESPACE_ONLY ..
关于javascript - 关闭编译器删除类 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331198/