2012-07-07 103 views
0

這可能是一個簡單的問題,但我需要創建一個相當於N個狀態必須完全分離的'class'實例的JavaScript。用不同的值創建一個模塊的幾個實例

喜歡:

var car = new Car('Ford'); 
var car = new Car('Toyota'); 

我怎樣才能做到這一點?

回答

5

你可以使用數組對象來存儲他們:

for (var i = 0; i < cars.length; i++) { 
    var car = cars[i]; 

    car.beep(); 
} 
+0

For..in iteration應該使用* hasOwnProperty * test來保護繼承屬性。還要注意,它不會以任何特定的順序返回成員,OP可能期望Array屬性總是按照數字索引的順序返回。這不一定是真實的(並且可以顯示不在某些瀏覽器中)。 – RobG 2012-07-07 05:05:03

+0

你能指點我一些文檔嗎?我並沒有真正遇到'for ... in'的問題,但我寧可不養壞習慣。 – Blender 2012-07-07 05:06:21

+0

[ES5 for..in](http://es5.github.com/#x12.6.4)聲明未指定順序並訪問繼承的屬性。 IE會按照它們添加的順序返回屬性,所以如果將它們按順序添加,就是它們返回的方式。另外刪除/添加一個屬性將其移動到最後。嘗試一下。 – RobG 2012-07-07 05:09:16

3

,如果很難看到有什麼問題:

var cars = []; 

cars.push(new Car('Ford')); 
cars.push(new Car('Toyota')); 

cars[0].beep(); 

您可以使用for循環遍歷所有存儲的實例在這兒。

從你的代碼片段中,我可以看到你可能在創建新實例時遇到的唯一問題是你給它一個相同的名字。

給它一些其他的變種名稱:

var ford = new Car('Ford'); 
var toyota = new Car('Toyota'); 

否則,如果您有不同品牌的陣列,並希望將其轉換成汽車對象數組,你可以這樣做:

var types = ["Ford", "Toyota", "VW", "renault"]; 

var cars = {}; 

for (var i = 0; i != types.length ; i++) 
    cars[types[i]] = new Car(types[i]); 

你可以這樣訪問這些車:

var ford = cars.Ford; 

或者像這樣:

var ford = cars["Ford"]; 
相關問題