[英]prototype confusion: parent prototype property affected by child prototype
我正在閱讀一本關於 OOP javascript 的書,並卡在其中一個例子上。
在示例代碼的第一個版本中,創建了Shape
構造函數 function 的新實例,並調用了toString
方法。 toString
方法返回“Triangle”,這是Triangle
原型的name
屬性,即使“Shape”應該是Shape
原型的name
屬性。
在示例代碼的第二個版本中, toString
方法按預期返回“Shape”。 我想知道代碼的第二個版本中的更改是如何產生差異的,因為在示例代碼的兩個版本中, Triangle
原型都持有對Shape
Shape
的name
屬性仍然是由於Triangle.prototype.name = "Triangle";
第一個版本: jsfiddle
第二個版本: jsfiddle
在第二個例子中,當你分配Triangle.prototype = new F();
然后創建了F function
的新實例,它繼承了Shape
的原型,這意味着Triangle.prototype
中的任何更改都將反映在該 object 實例中,但不會反映在F's constructor
中,因為 object 實例無法更改其構造函數,但如果您更改了constructor's prototype/Shape.prototype
,那么由該構造函數 function 創建的任何 object 也將被反映出來。 但是如果你被分配了Triangle.prototype = F.prototype
它可能會有所不同。
我在這里做了一些改動。 希望它能幫助你理解,在控制台中看到。
在第二個例子中,Triangle.prototype 獲得了一個新的引用——new F()。 因此,與第一個示例不同,Triangle.prototype 實際上是與 Shape.prototype 不同的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.