0

我需要创建一个类的新实例,其名称由以下方式动态构建:

eval('SomeObject.'+id+' = new SomeClass'+Data.type+'(id, Data);');
// results in:
SomeObject._123 = new SomeClassWithDynamicName(id, Data);

它工作正常,但我宁愿避免使用 eval (在 eval 发生后几乎不可能跟踪代码中的错误)并执行以下操作:

SomeObject[id] = new ('SomeClass'+Data.type)(id, Data);
4

2 回答 2

2

尝试这个 :

var SomeObject[id] = window['SomeClass'+Data.type];
SomeObject[id].setId(id);
SomeObject[id].setData(Data);

更新:如果你没有二传手,你也可以试试这个:

var SomeObject[id] = window['SomeClass'+Data.type](id, Data);

这里有一个类似的问题:Instantiate a JavaScript Object Using a String to Define the Class Name

于 2013-05-04T00:49:35.093 回答
1

你真的需要这样全局声明类吗?如果您可以在对象上注册它们,这将不是问题,例如:

var classes = {};
classes.Type1 = function (id, data) { ... }
classes.Type2 = function (id, data) { ... }

var type = 'Type1';
var instance = new classes[type](id, data);
于 2013-05-04T00:50:59.360 回答