每個實例都有一個到創建它的構造函數原型的鏈接。所以每個實例都共享原型成員。如果通過一個實例對共享原型成員進行更改,則會反映到所有其他實例。爲什麼這似乎不符合基本類型工作,因爲可以看到下面:原型中原始類型的行爲
//creating an empty object type
function OBJTYPE(){};
//adding primitive value and reference value as a memeber to
//the prototype of the object type
OBJTYPE.prototype.value = 0;
OBJTYPE.prototype.arr = ["red","green","blue"];
//creating instances of the object type
var obj1 = new OBJTYPE();
var obj2 = new OBJTYPE();
//outputting the prototype members through both the instances
document.write(obj1.value + "<br />"); //0
document.write(obj2.value + "<br />"); //0
document.write(obj1.arr + "<br />"); //red,green,blue
document.write(obj2.arr + "<br />"); //red,green,blue
//changing value of primitive member
obj1.value = 1; //creates a new instance property
//modifying the reference type member - pushing a value on the array
obj1.arr.push("black"); //modifies the prototype property
//outputting the prototype members through both the instances
document.write(obj1.value + "<br />"); //1 //.value from instance
document.write(obj1.__proto__.value + "<br />"); //0 //.value from prototype
//works in Firefox, Safari, and Chrome
document.write(obj2.value + "<br />"); //0 //.value from prototype
document.write(obj1.arr + "<br />"); //red,green,blue,black
document.write(obj2.arr + "<br />"); //red,green,blue,black
正如你可以在上面看到改變原始成員的價值創造,而不是覆蓋同名屬性調用value
上obj1
一個新的實例屬性,在原型中。因此,當訪問obj1.value
屬性時,它會返回屏蔽原型屬性的實例屬性。這就是爲什麼兩個實例顯示不同值value
。
但是,這不引用類型的行爲不像從上面可以看出。爲什麼?
很大,但有什麼辦法可以修改基本類型創建這樣沒有實例屬性,但原型屬性被修改 – Mahesha999
沒有因爲原始值沒有任何修改。更準確地說,它們是不可改變的。 – Esailija
多虧了這一點,現在只是脫離主題,我試圖用@提及你,但是當我提交評論時,它刪除了提及。此外,當我點擊@時,它並未向我顯示列表中所有成員的列表彈出窗口,這是用於早期發生的。爲什麼? – Mahesha999