2016-05-05 11 views
1

私の関数はモデル名を文字列として取得します。その名前に基づいてオブジェクトの新しいインスタンスを作成する必要があります。文字列を名前として使用してオブジェクトを作成する

例:

modelName = 'MockA'; 
    model = new modelName(); 

これは働いていないofcourseのです。

var model = new window[modelName](); 

を、あなたはあなたがあなたのモデルを保存する方法を再考すべきでない場合、例えば:PHPで私はMockAがグローバルスコープ内にある場合は、使用することができ、事前

+0

サムシング[*変数名に文字列を変換する*]のような(http://stackoverflow.com/questions/14995303/converting-string-to- variable-name-javascript)が役に立ちます。 – RobG

答えて

4

model = new $$modelName 

感謝を使用します。モデルのオブジェクトと:

var my_models = { 
    MockA: function() {}, 
    MockB: function() {} 
} 

var MockA = my_models.MockA; 
// or 
var model_name = 'MockA'; 
var MockA = my_models[model_name]; 
+0

グローバルスコープにない場合はどうなりますか? – Raghuveer

+0

@irvgkどのオブジェクトにも添付されていない場合は、あなたはねじ込まれています。 – andlrc

+0

anctualyは、odule.exports = mongoose.model( 'Client'、新しいスキーマ({ – Galvani

0

にアクセスするには、object factoryまたはbracket notationを使用することができます。

コードのサンプル:

// First example: Use a Factory 
 
var MockA = function() { 
 
    this.sayHello = function() { 
 
     console.log('Hi from MockA '); 
 
    }; 
 
    }, 
 
    MockB = function() { 
 
    this.sayHello = function() { 
 
     console.log('Hi from MockB '); 
 
    } 
 
    }, 
 
    factory = function(type) { 
 
    var obj; 
 
    switch (type) { 
 
     case 'MockA': 
 
     obj = new MockA(); 
 
     break; 
 
     case 'MockB': 
 
     obj = new MockB(); 
 
     break; 
 
    } 
 
    return obj; 
 
    } 
 

 
var objA = factory('MockA'); 
 
objA.sayHello(); 
 
var objB = factory('MockB'); 
 
objB.sayHello(); 
 

 
// Second example: Using bracket notation 
 
var models = { 
 
    BaseMockA: { 
 
    sayHello: function() { 
 
     console.log('Hi from BaseMockA '); 
 
    } 
 
    }, 
 
    BaseMockB: { 
 
    sayHello: function() { 
 
     console.log('Hi from BaseMockB '); 
 
    } 
 
    } 
 
}; 
 
var baseObjA = Object.create(models['BaseMockA']); 
 
baseObjA.sayHello(); 
 
var baseObjB = Object.create(models['BaseMockB']); 
 
baseObjB.sayHello();

+0

* 'MockA'と' MockB'の両方が* Factory *が呼び出されるたびに作成されることに気づいていますが、これは非常に効果がありません。 – andlrc

+0

@andrc、ご意見ありがとうございます。私の編集を見てください。 – GibboK

関連する問題