在原型中使用数组

时间:2014-05-06 18:21:58

标签: javascript oop

我的OOP JavaScript存在问题。如果对象中有一个数组,并且我在对象的新实例中推送它,则会将其保存到所有实例中。有谁知道我做错了什么?

function Car(){}
Car.prototype.name = "";
Car.prototype.color = [];

var suv = new Car;
suv.color.push("black"); //black

var sedan = new Car;
sedan.color.push("green"); //black, green

2 个答案:

答案 0 :(得分:3)

你想要的每个原型上都有这个数组:

function Car() {
    this.color = [];
}

var suv = new Car();
suv.color.push("black"); //black

var sedan = new Car();
sedan.color.push("green"); //green

答案 1 :(得分:3)

您希望每个汽车实例都有自己的数组,因此您不应在原型上定义它。您可以在原型中放置在所有实例之间共享的内容,例如所有Car的所有功能,或者在每个实例上都没有定义属性的默认值:

function Car(name){
    if ( typeof name === 'string' )
        this.name = name;
    this.color = [];
}
Car.prototype.name = "No name"; // Default name

var suv = new Car('SUV');
suv.color.push("black");
console.log(suv.name); // "SUV"

var sedan = new Car;
sedan.color.push("green");
console.log(sedan.name); // "No name"