首頁  >  文章  >  後端開發  >  javascript - JS請教一個new物件繼承prototype的Array的問題?

javascript - JS請教一個new物件繼承prototype的Array的問題?

WBOY
WBOY原創
2016-08-27 09:06:53976瀏覽

<code><script type="text/javascript"> 

function Person(){} 

Person.prototype.array = new Array("Koji", "Luo"); 

Person.prototype.showArray = function(){ 
alert(this.array); 
} 

var obj1 = new Person(); //生成一个Person对象 
var obj2 = new Person(); 

obj1.array.push("Kyo"); //向obj1的array属性添加一个元素 

obj1.showArray(); //Koji,Luo,Kyo 
obj2.showArray(); //Koji,Luo,Kyo 

</script> </code>

obj1的array中添加一個元素,obj2的array中也會添加.
他們倆繼承的array是一個指針嗎? 大家都有的是prototype這個對像中的array?

<code>//最后问一个很奇怪的问题(prototype中的array难道也只是一个指针?)
</code>

謝謝大家..

回覆內容:

<code><script type="text/javascript"> 

function Person(){} 

Person.prototype.array = new Array("Koji", "Luo"); 

Person.prototype.showArray = function(){ 
alert(this.array); 
} 

var obj1 = new Person(); //生成一个Person对象 
var obj2 = new Person(); 

obj1.array.push("Kyo"); //向obj1的array属性添加一个元素 

obj1.showArray(); //Koji,Luo,Kyo 
obj2.showArray(); //Koji,Luo,Kyo 

</script> </code>

obj1的array中添加一個元素,obj2的array中也會添加.
他們倆繼承的array是一個指針嗎? 大家都有的是prototype這個對像中的array?

<code>//最后问一个很奇怪的问题(prototype中的array难道也只是一个指针?)
</code>

謝謝大家..

首先要明白是怎麼實現繼承的。 。

1、建構子有一個prototype屬性。
2、建構子的每個實例都有一個__proto__指向其建構子的prototype屬性。
3、當訪問某物件本身不存在的屬性,會透過__proto__去其建構函數的prototype上尋找。
4、所以呼叫obj1.array 訪問的是 Person.prototype.array;調用obj2.array 訪問的也是 Person.prototype.array
5、obj1obj2都共用著這一個array
6、所以跟按值傳遞還是引用傳遞無關。原本各個實例都存取的是一個prototype
各實例沒有保存一份對構造函數原型的拷貝····

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn