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

UPDATE:セッターがない場合は、これを試すこともできます:

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

同様の質問がここにあります:クラス名を定義するために文字列を使用して JavaScript オブジェクトをインスタンス化する

于 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 に答える