2011-01-04 8 views
9

Javascriptでは、eval()を使わずに新しいクラスを動的にインスタンス化し、引数を渡しますか?たとえば、 は、新しいCatViewControllerを作成し、「kitten」を渡したいとします。どうすればいいでしょうか?動的クラスをインスタンス化

var myClassname = "CatViewController"; 
var cat = new myClassname("kitten"); 

それはに解決する必要があります

var cat = new CatViewController("kitten"); 

感謝を!限り機能は、あなたがこれを行うことができます範囲内であるとして

+1

@Chaosがより正確な答えを出すためには、コンストラクタ関数の定義方法と場所を示す必要があります。彼の一般的な例は、一般にどのように動作するかを示しています。 – user113716

答えて

8

var cat = new this[myClassname]("kitten"); 

別の同様の方法:

var classes = { 
    A: function (arg) { 

    }, 
    B: function (arg) { 

    }, 
    C: function (arg) { 

    } 
}; 

var a = new classes["A"]("arg"); 
+1

これは 'this == window'のみで動作し、varはグローバルスコープにあります。 –

+0

@Matthew - そうではありません。実際にはどのスコープ内でも機能することができますが、スコープ内で定義する必要があります。 – ChaosPandion

+0

this!= windowの別のクラスの中でインスタンス化するとどうなりますか? – jaysonp

0

@Matthew - あなたはwindowスコープへの参照を持っている場合は、良いことがあります行く、右? thisキーワードの代わりにwindowの参照を使用してください。私のために働いているようだ。しかし、私がプロジェクトで現在使用しているので、このアプローチの落とし穴があるかどうかは非常に不思議です。 Here is a demo以前のデモに基づいています。

関連する問題