我的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
答案 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"