簡體   English   中英

原型混淆:父原型屬性受子原型影響

[英]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 Shapename屬性仍然是由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM