我有以下遗留代码,我想从中删除eval:
eval('view = new ' + o.base + '(o)');
到目前为止,我提出的最好的是......
view = eval(o.base).prototype.constructor.apply(o)
......显然仍然使用eval。有人可以帮忙吗?
注意: o.base 变量是一个引用有效函数的限定类名(例如“application.area.type.ClassName”)。
答案 0 :(得分:3)
view = application.area.type[o.base].prototype.constructor.apply(o);
但您仍然可以使用new
:
view = new application.area.type[o.base](o);
<强>更新强>
为表示任何限定名称的o.base
实现此目的的更通用方法是:
var base = window;
for(var i=0,ns=o.base.split('.'); i<ns.length; ++i) {
base = base[ns[i]];
}
view = new base(o);