我有一个方法可以让我在创建新对象时选择原型对象(复制自“Javascript:The Good Parts”一书):
Object.create = function(o) {
var F = function() {};
F.prototype=o;
return new F();
}
现在说,我有一个对象:
var car = {
model: "Nissan"
};
我基于这个对象创建了一个新对象,使用“创建”方法:
var car1 = Object.create(car);
然后我可以向 car 添加一个属性,它将动态添加到 car1(动态原型)。所以例如:
car.year=2011; // Gets added to "car"...
alert(car1.year); // ... Is also avaialable to car1
Q1)这种行为表明“年份”已添加到汽车的原型中,这就是它可用于 car1 的原因。它是否正确?如果没有,那么“年”在哪里添加,为什么“汽车”和“汽车1”都可以使用它?
此外,根据委托规则,如果在对象上找不到方法,它将搜索其原型,然后检查链上的所有原型,直到找到 Object.prototype。所以现在,如果我输入这样的内容:
Object.prototype.originCountry = "Japan";
alert(car.originCountry); // Outputs Japan
alert(car1.originCountry); // Outputs Japan
到现在为止还挺好; 但是,如果我这样做:
Object.carColor= "White";
alert(car.carColor); // Error!
Q2)当我向“汽车”添加属性时(参见上面的car.year示例,它被添加到汽车的原型中。但是,当我向对象添加属性时,它不会被添加到对象的原型中?如果确实添加了到 Object 的原型,那么根据委托规则,为什么“汽车”不能使用它?
为什么会这样?