為什麼在 Derived.prototype = new Base 中使用 'new' 關鍵字?
在 JavaScript 中,繼承是透過原型來實現的。若要擴充現有類,您可以將子類別的原型指派給父類的新執行個體。這就是“new”關鍵字發揮作用的地方。
在以下程式碼中:
WeatherWidget.prototype = new Widget;
「new」關鍵字有兩個用途:
如果保留「new」會發生什麼出?
如果沒有“new”,您就不會呼叫 Widget 建構子。相反,您需要為 Widget() 提供一個參數清單。但是,這可能是不可能的,並且可能會導致錯誤。
不共享屬性的重要性
預設情況下,WeatherWidget 的實例將共用同一實例中的屬性值小部件。這可能會導致意外行為,因為 WeatherWidget 的多個實例可能會覆寫或修改彼此的屬性。
為了防止這種情況,建議使用「Dummy」建構子(例如,Dummy.prototype = Widget.prototype)作為中間步驟,它為WeatherWidget 建立一個新原型,該原型不會從父實例繼承屬性值。這確保每個 WeatherWidget 實例都有自己的一組繼承屬性。
較新 JavaScript 版本中的替代方法
在 ECMAScript 5 及更高版本中,您可以使用:
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
此方法還有一個額外的好處,即使建構子屬性不可寫、可枚舉或
明確呼叫父建構子
您可能需要在子建構函式中明確呼叫父建構函式(例如Widget.apply(this, arguments))初始化父級
結論
理解 Derived.prototype = new Base 中 'new' 的使用對於在 JavaScript 中正確實現繼承至關重要。它確保子類別繼承正確的原型,並防止實例之間意外共享屬性值。
以上是為什麼在 `Derived.prototype = new Base` 中使用 `new` 進行 JavaScript 繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!