Javascript Don';在从字符串帮助实例化对象时不想使用eval?

Javascript Don';在从字符串帮助实例化对象时不想使用eval?,javascript,constructor,eval,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”) view = application.area.type[o.base].pr

我有以下要从中删除eval的遗留代码:

eval('view = new ' + o.base + '(o)');
到目前为止,我想到的最好的办法是

view = eval(o.base).prototype.constructor.apply(o)
。。。显然它仍然使用eval。有人能帮忙吗

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

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);
var base=window;

对于(变量i=0,ns=o.base.split('.'));I不幸的是,我不知道字符串的内容,只知道它将是那种格式。o.base字符串。我知道它将是一个限定的类/函数名,但我在包含原始代码的函数的参数中接收到o作为对象参数,因此我无法手动写出上面的application.area.type…位。@Martin,I think我明白你的意思,我已经更新了我的答案,让我知道它是否有用。好的,谢谢。我希望有一种方法可以在不拆分字符串的情况下完成它,但我想没有。这确实使它比单行实现长了很多。我想它回避了一个问题:“在这种情况下,eval有多邪恶?”。谢谢你的帮助:)@Martin,复杂性并没有真正改变,因为即使是eval也必须以与上述代码完全相同的方式查找每个对象。所以eval肯定不会让事情变得更快。