Перезапись и расширение прототипа - PullRequest
2 голосов
/ 25 сентября 2011

Я не уверен, почему, когда я перезаписываю приведенный ниже прототип объектом (Gadget.prototype = { цена: 100;}, только новые экземпляры гаджета (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 Ответ

4 голосов
/ 25 сентября 2011

Мне кажется, это очевидно - каждый объект имеет ссылку на свой прототип, который устанавливается при первом создании объекта. Если вы установите прототип на что-то новое:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...