对象实例共享子属性?

时间:2014-10-08 15:49:58

标签: javascript properties constructor prototype

给出以下代码:

var Car = function() {};

Car.prototype = {
  wheels: {
    rims: 'steel'
  }
}

var volvo = new Car;
var mercedes = new Car;

volvo.wheels.rims = 'aluminium';

console.log(volvo.wheels.rims, mercedes.wheels.rims); // 'aluminium', 'aluminium'

您能解释为什么mercedes的实例Auto会自动从rims继承volvo的子属性定义吗?

请注意,以下代码按预期使用相同的设置:

volvo.wheels = 4;

console.log(volvo.wheels, mercedes.wheels); // 4, Object { rims: 'steel' }

1 个答案:

答案 0 :(得分:2)

您只为wheels创建了一个对象。

您将此对象分配给原型,因此每个实例都会继承其值。

Javascript将从不自动复制对象。

相反,您应该在构造函数中创建对象,以便为每个实例获取一个新对象。