7

javascriptを使用してクラス名を変数として渡すにはどうすればよいですか?

クラス Person があるとしましょう。

クラスの名前を関数に渡して、その関数がそのクラスを呼び出せるようにします。

したがって、関数は

function openClass(name)

渡したい

openClass('person')

openClass がクラスの人を呼び出すことができるように

例えば

function openClass(name)
{
    return new name() // here I want this line to actually 
                      // call the class "Person" if that is 
                      // what is passed in as a name parameter,

}
4

4 に答える 4

7

技術的には、JavaScriptにはクラスはありません。多くのサードパーティライブラリはJavaScriptの上にクラスシステムを作成しますが。

「クラス」は通常、コンストラクター関数です。したがって、関数の名前がある場合は、それをグローバルスコープから掘り下げる必要があります。関数がグローバルに定義されていると仮定します。

var Constructor = window[name];
return new Constructor();

関数が実際にたとえばで定義されているmy.namespace.Person場合、それはもう少し複雑ですが、それでも同じ一般的な考え方です。

于 2012-11-07T16:00:01.090 に答える
3

できるよ

function openClass(name) {
    return new window[name]();
}

デモンストレーション(コンソールを開く)

もちろん、クラスをグローバル関数として宣言せず、特定のオブジェクトまたは配列で宣言する場合は、windowをこのオブジェクトまたは配列に置き換えてください。

于 2012-11-07T16:00:32.627 に答える
2

そのクラスのコンストラクターを渡すだけです。したがって、クラスが Person の場合、コンストラクターがあります。

var Person = function(){
    //...
}

you can pass that in to getClass as an argument

var getClass = function(constructor){
    return new constructor()
};

var newObject = getClass(Person);
于 2012-11-07T16:02:37.997 に答える
-3

単に電話してopenClass(Person)ください。

Personこれにより、関数がに渡されopenClass、通常どおりに呼び出すことができます。

本当に文字列として渡す必要があるPerson場合は、名前で関数を探すことができます。

window[name]
于 2012-11-07T15:59:48.277 に答える