是否有任何流行的JavaScript混淆器能够内联常量并重命名对象的公共属性/方法?
即
var CONST1 = 5;
var CONST2 = 10;
function Test() {
abc = 123;
this.xyz = 234;
}
Test.prototype = {
do_it: function(argX, argY) {
return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
}
};
document.getElementById("button").onclick = function() {
x = document.getElementById("x").value;
y = document.getElementById("y").value;
alert("Done it: " + new Test().do_it(x, y));
}
我希望CONST1和CONST2有效地消失并将其值内联。
我希望替换/修改所有名称(abc,xyz,Test,do_it,argX,argY)。
我希望混淆器假设外部没有任何东西依赖于我的源中的任何对象/方法/常量名称。
Google Closure或任何其他混淆器可以这样做吗?
答案 0 :(得分:2)
Google Closure可以完成上述所有操作。他们在http://closure-compiler.appspot.com/home提供了基于网络的用户界面,供您使用自己的代码进行测试。
答案 1 :(得分:1)
是的,Closure Compiler可以在高级编译模式下执行此操作,但需要注释以防止自动删除prototype
属性。例如,这个:
var CONST1 = 5;
var CONST2 = 10;
function Test() {
abc = 123;
this.xyz = 234;
}
Test.prototype = {
do_it: function(argX, argY) {
return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
}
};
注释如下:
var CONST1 = 5;
var CONST2 = 10;
/** @constructor */
function Test() {
abc = 123;
this.xyz = 234;
}
/** @expose */
Test.prototype = {
do_it: function(argX, argY) {
return (argX + abc) / CONST1 + (argY + this.xyz) / CONST2;
}
};
window["Test"] = Test;
然后当它运行时,转换为:
function a() {
abc = 123;
this.a = 234;
}
a.prototype = {b:function(b, c) {
return(b + abc) / 5 + (c + this.a) / 10;
}};
window.Test = a;