从String中实例化对象时不想使用eval - help?

时间:2011-06-20 11:26:19

标签: javascript constructor eval

我有以下遗留代码,我想从中删除eval:

eval('view = new ' + o.base + '(o)');

到目前为止,我提出的最好的是......

view = eval(o.base).prototype.constructor.apply(o)

......显然仍然使用eval。有人可以帮忙吗?

注意: o.base 变量是一个引用有效函数的限定类名(例如“application.area.type.ClassName”)。

1 个答案:

答案 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);