2013-05-04 48 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);