我有这个代码,我正在尝试使用闭包编译器来优化代码。
var HrevertGraph = HrevertGraph || {};
HrevertGraph.CircularProgress = (function(){
function Progress(){
//Properties
}
Progress.prototype.getCenter = function() {
//method
}
//and other methods
return Progress;
})();
window["HrevertGraph.CircularProgress"] = HrevertGraph.CircularProgress;
我在高级选项模式下编译了这个,问题是编译后的代码没有显示构造函数Progress
及其原型方法。
在这种情况下我该怎么做?
答案 0 :(得分:2)
如果您不希望闭包编译器更改原型成员,您可以这样做:
Progress.prototype['getCenter']=function....
但是你必须在编译代码中使用括号表示法来调用这个函数。
导出构造函数时,您可以执行以下操作:
window["HrevertGraph"] = {};
window["HrevertGraph"]["CircularProgress"] = HrevertGraph.CircularProgress;
<强> [UPDATE] 强>
这是一个可以在运行未编译代码的页面控制台中运行的函数。控制台中的输出是要编译的代码中的导出,复制和粘贴,它将导出构造函数和原型。例如,特定成员(使用this.something = ...定义在Progress中的成员)没有简单的脚本来生成导出。最好在Progress构造函数中使用this['something']=this.something
之类的东西来处理它们。
function exportConstructor(objPath){
var i = -1,len = objPath.length,ret=[]
,exPath='window',clPath='window',
o,thing;
while(++i<len){
exPath=exPath+'["'+objPath[i]+'"]';
clPath=clPath+'.'+objPath[i];
ret.push(exPath);
ret.push("=");
ret.push(clPath);
ret.push(";\n");
}
var i = 0,o=window[objPath[i]];
while(++i<len){
o=o[objPath[i]];
}
o=o.prototype;
exPath=exPath+'["prototype"]';
clPath=clPath+'.prototype';
for(thing in o){
if(Object.hasOwnProperty.call(o,thing)){
exPath=exPath+'["'+thing+'"]';
clPath=clPath+'.'+thing;
ret.push(exPath);
ret.push("=");
ret.push(clPath);
ret.push(";\n");
}
}
return ret.join("");
}
console.log(exportConstructor(['HrevertGraph','CircularProgress']));