2011-11-10 19 views
1

私は、変数に割り当てられたオブジェクトの束を持っている:Javascript:動的に決定された変数のメソッドを呼び出す方法

var ElectricCar = { 
    start: function(){ alert('started electric car') } 
}; 

var BioDieselCar = { 
    start: function(){ alert('started bio diesel car') } 
}; 

私は、これらのオブジェクトのいずれかにstartメソッドを呼び出したいが、私はのみで動作するように文字列を持っている:

どう
var Starter = { 
    init: function(carType){ 
     //... start the car that matches car type 
    } 
}; 

Starter.init('ElectricCar'); 

適切なオブジェクトのstartメソッドを呼び出すことはできますか?

+0

を持っている場合は、あなたのコードが存在する場所に依存して異なります。なぜあなたはvarステートメントを使うのですか?それは機能の中にありますか? – HerrSerker

+0

私は呼び出すことができるメソッドでオブジェクトを作成する単なる方法です。 – Andrew

+0

あなたは、varは変数のスコープをローカルにするためのものですか? – HerrSerker

答えて

5

これを試してみてください。

var cars = { 
    ElectricCar: { 
     start: function(){ alert('started electric car') } 
    }, 
    BioDieselCar: { 
     start: function(){ alert('started bio diesel car') } 
    } 
}; 

var carType = 'ElectricCar'; 

// access the properties of cars by string 
cars[carType].start(); 

この方法は、evalの使用を避けるため、望ましい方法です。 varsをオブジェクトのプロパティに変換することにより、オブジェクトを文字列で参照できます。

+0

+1 JavaScriptファクトリパターン。それはいいね。 –

+1

@Andrew - それは事実上同じことではないでしょうか? 'cars [carType] .Start();'を 'init'に移動するだけです。今は工場のパターンのように見えます。 –

1

は好ましい技術は少しあなたのコードをリファクタリングが必要となる

this[carType](); 
+0

ニース! 'this [carType] .start()'にする必要があります –

+0

私のコードサンプルを少し更新しました。私は可変スコープが重要な考慮事項であるかもしれないことを認識しました。 – Andrew

1
self[carType].start() 

自己あなたは何のフレームを持っていない場合は、ウィンドウのようなものですが、あなたは

関連する問題