2012-07-07 52 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"]; 
相关问题