覆盖和扩展原型

时间:2011-09-24 21:25:29

标签: javascript

我不确定为什么当我用对象覆盖下面的原型时(Gadget.prototype = { price:100;},只有Gadget(theGadget)的新实例可以访问新属性。

但扩展时(Gadget.prototype.price = 100)所有实例都可以访问。

function Gadget(name, color) {
this.name = name;
this.color = color;
this.brand = "Sony";
this.whatAreYou = function(){
return 'I am a ' + this.color + ' ' + this.name;
    }
}

myGadget = new Gadget();

myGadget.brand;


//Gadget.prototype.price = 100;

Gadget.prototype = {
 price: 100,
 rating: 3,

};

myGadget.price;
theGadget = new Gadget();
theGadget.price

1 个答案:

答案 0 :(得分:4)

对我来说似乎很明显 - 每个对象都有一个对其原型的引用,该对象在首次构造时设置。如果您将原型设置为新的:

Gadget.prototype = {price: 100};

您尚未将任何引用更改为旧原型。只有之后创​​建的对象才会将其原型设置为新值。


想想它之间的区别:

var a = {foo: true};
var b = a;
a = {baz: 'quux'}; // b refers to the original value of a

和此:

var a = {foo: true};
var b = a;
a.baz = 'quux'; // a and b refer to the same object