从 String 实例化对象时不想使用 eval - 帮助吗?

发布于 2024-11-16 04:04:45 字数 304 浏览 0 评论 0原文

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

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

到目前为止我想出的最好的代码是

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

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

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

I have the following legacy code that I'd like to remove eval from:

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

The best I've come up with so far is ...

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

... which obviously still uses eval. Can someone please help?

NOTE: The o.base variable is a qualified classname (e.g. "application.area.type.ClassName") referring to a valid function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

第七度阳光i 2024-11-23 04:04:45
view = application.area.type[o.base].prototype.constructor.apply(o);

但您仍然可以使用 new

view = new application.area.type[o.base](o);

UPDATE

对于表示任何限定名称的 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);
view = application.area.type[o.base].prototype.constructor.apply(o);

But you can still use new:

view = new application.area.type[o.base](o);

UPDATE

A more generic way to achieve this for o.base representing any qualified name would be:

var base = window;
for(var i=0,ns=o.base.split('.'); i<ns.length; ++i) {
   base = base[ns[i]];
}
view = new base(o);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文