首頁 >web前端 >js教程 >為什麼在 `Derived.prototype = new Base` 中使用 `new` 進行 JavaScript 繼承?

為什麼在 `Derived.prototype = new Base` 中使用 `new` 進行 JavaScript 繼承?

Patricia Arquette
Patricia Arquette原創
2024-12-21 04:27:10205瀏覽

Why Use `new` in `Derived.prototype = new Base` for JavaScript Inheritance?

為什麼在 Derived.prototype = new Base 中使用 'new' 關鍵字?

在 JavaScript 中,繼承是透過原型來實現的。若要擴充現有類,您可以將子類別的原型指派給父類的新執行個體。這就是“new”關鍵字發揮作用的地方。

在以下程式碼中:

WeatherWidget.prototype = new Widget;

「new」關鍵字有兩個用途:

  • 呼叫建構子:它建立Widget 類別的新實例。該實例成為 WeatherWidget 類別的原型。
  • 設定 Prototype 屬性: 建構函式呼叫的回傳值(即 Widget 的新實例)被指派給的原型屬性WeatherWidget 類別。

如果保留「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中文網其他相關文章!

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