string が与えられた場合、classname
オブジェクトのインスタンス化に使用できる、その文字列にちなんで名付けられた新しい JavaScript 関数を動的に作成したいと考えています。
使用してみましeval()
たが、何らかの理由で宣言された関数がグローバル (ウィンドウ) スコープに表示されません。
eval( "function " + classname + "() {}" );
window[ classname ]; // => undefined
文字列にちなんで名付けられた新しい関数を動的に作成する方法はありますか?
または、代わりに、 を介して作成した後に、作成された関数を参照する方法を教えてくださいeval
。興味深いことに、Safari でデバッグするとローカル変数として表示されます。
アップデート:
とった!もちろんeval
、インスタンスを作成するためにもう一度使用するだけです。
var myInstance = eval( "new " + classname );
myInstance.constructor.name; // => classname (yay)
これは、宣言された直後にクラスのインスタンスを 1 つ作成するだけでよいため、私の場合はうまくいくはずです。ただし、一般的なケースについては、Pointyの回答を参照してください。