<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、obj1
與obj2
都共用著這一個array
。
6、所以跟按值傳遞還是引用傳遞無關。原本各個實例都存取的是一個prototype
各實例沒有保存一份對構造函數原型的拷貝····