2013-05-04 50 views
0

我需要创建一个类名是通过动态建立的一个新实例:动态VARNAME,避免的eval()

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

回答

2

试试这个:

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

UPDATE:你ç一个也试试这个,如果你不具备制定者:

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

也有同样的问题在这里:Instantiate a JavaScript Object Using a String to Define the Class Name

+0

不客气,你可以把问题作为检查吗? – 2013-05-04 01:32:30

1

你真的需要为这样的全球声明中的类?如果你可以将它们注册到一个对象上,这将是一个非问题,例如:

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

var type = 'Type1'; 
var instance = new classes[type](id, data);