在用google closure compiler编译JS文件时发现eval无法通过,有谁知道怎么解决这个问题啊?
下面为要用closure compiler编译的测试JS代码,详细见资源文件。(function(){
var Effects = window.Effects = function(){
var transTotal = 10;
this.transition = function (maskID, maskTime){
if (maskID <= transTotal) {
var maskFunName = "mask" + maskID;
eval(maskFunName)(maskTime);
//这里因为使用了eval方法所以造成无法通过google closure compiler编译,如何才能使编译正常通过?
} else {
mask1(maskTime);
}
}
function mask1(maskTime) {
alert("mask1: " + maskTime);
}
function mask2(maskTime) {
alert("mask2: " + maskTime);
}
function mask3(maskTime) {
alert("mask3: " + maskTime);
}
/*
.
.
.
...下面还有很多mask函数.
*/
};
})();var masker = new Effects();
masker.transition(3, 2);
masker.transition(30, 8);
下面为要用closure compiler编译的测试JS代码,详细见资源文件。(function(){
var Effects = window.Effects = function(){
var transTotal = 10;
this.transition = function (maskID, maskTime){
if (maskID <= transTotal) {
var maskFunName = "mask" + maskID;
eval(maskFunName)(maskTime);
//这里因为使用了eval方法所以造成无法通过google closure compiler编译,如何才能使编译正常通过?
} else {
mask1(maskTime);
}
}
function mask1(maskTime) {
alert("mask1: " + maskTime);
}
function mask2(maskTime) {
alert("mask2: " + maskTime);
}
function mask3(maskTime) {
alert("mask3: " + maskTime);
}
/*
.
.
.
...下面还有很多mask函数.
*/
};
})();var masker = new Effects();
masker.transition(3, 2);
masker.transition(30, 8);
var fn = eval(maskFunName);
fn(maskTime);
我没试你代码是正确的,本来就没问题,你要通过google的封闭编译,那就别用eval。很可能google不推荐使用eval函数,因为它具有潜在危险验证google是否对eval有限制,可以把eval替换成简单的语句eval('alert("ok")'),看是否依旧有警告。我建议你不要去使用eval函数:(function(){
var Effects = window.Effects = function(){
var transTotal = 10;
this.transition = function (maskID, maskTime){
if (maskID <= transTotal) {
var maskFunName = "_mask" + maskID;
this[maskFunName](maskTime);
} else {
this._mask1(maskTime);
}
}
this._mask1 = function (maskTime) {
alert("mask1: " + maskTime);
}
this._mask2 = function (maskTime) {
alert("mask2: " + maskTime);
}
this._mask3 = function (maskTime) {
alert("mask3: " + maskTime);
}
/*
.
.
.
...下面还有很多mask函数.
*/
};
})();var masker = new Effects();
masker.transition(3, 2);
masker.transition(30, 8);
先说一下:
this['mask1'] 等价于 this.mask1举例说明一下:
this['mask1'](maskTime)会在当前函数this指向的对象中寻找mask1函数而你是通过在Effects函数内定义的function mask1(){}函数,是个局域函数,且并未和this对象存在任何关联。因此window['mask1']和this['mask1']都是不存在的