【发布时间】:2012-02-02 11:57:03
【问题描述】:
Closure Compiler 文档明确指出:“不要使用 Externs 而不是 Exports”。因为 Extern 使用起来非常方便,所以我遇到了一个问题:
function Lib(){
//some initialization
}
Lib.prototype = {
invoke : function(str){
//this function is called from outside to invoke some of Lib's events
}
}
当使用带有 ADVANCED_OPTIMIZATIONS 的 Closure Compiler 时,会从源代码中删除函数调用。可以通过两种方式防止这种情况: 在原型定义后添加一行:
Lib.prototype['invoke'] = Lib.prototype.invoke;
但这在输出代码的末尾添加了一个丑陋的代码和平:
Lib.prototype.invoke = Lib.prototype.g;
我设法通过将这一行添加到构造函数来摆脱它:
this.invoke = this.invoke;
这行到外部文件:
/**
* @param {String} str
*/
Lib.prototype.invoke = function(str){};
这样,Closure Compiler 不能从输出代码中删除 invoke 函数,因为它是在构造函数中自己赋值的,而且它不能重命名它,因为它是在 externs 文件中定义的。 那么女巫的方法更好?
【问题讨论】:
标签: javascript google-closure-compiler