2011-09-24 184 views
2

我不知道爲什麼當我用對象覆蓋下面的原型時(Gadget.prototype = {0}},只有新的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 

回答

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 
+0

謝謝,有概念,但不能用語言表達。你的解釋很清楚。 – Wasabi