Heim >Web-Frontend >js-Tutorial >Warum „new' in „Derived.prototype = new Base' für die JavaScript-Vererbung verwenden?

Warum „new' in „Derived.prototype = new Base' für die JavaScript-Vererbung verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-21 04:27:10205Durchsuche

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

Warum das Schlüsselwort „new“ in Derived.prototype = new Base verwenden?

In JavaScript wird die Vererbung durch Prototypen erreicht. Um eine bestehende Klasse zu erweitern, können Sie den Prototyp der untergeordneten Klasse einer neuen Instanz der übergeordneten Klasse zuweisen. Hier kommt das Schlüsselwort „new“ ins Spiel.

Im folgenden Code:

WeatherWidget.prototype = new Widget;

Das Schlüsselwort „new“ dient zwei Zwecken:

  • Ruft die Konstruktorfunktion auf: Sie erstellt eine neue Instanz der Widget-Klasse. Diese Instanz wird zum Prototyp für die WeatherWidget-Klasse.
  • Setzt die Prototype-Eigenschaft: Der Rückgabewert des Konstruktoraufrufs (d. h. die neue Instanz von Widget) wird der Prototypeigenschaft von zugewiesen die WeatherWidget-Klasse.

Was passiert, wenn „neu“ übrig bleibt? Out?

Ohne „new“ würden Sie den Widget-Konstruktor nicht aufrufen. Stattdessen müssten Sie eine Argumentliste für Widget() bereitstellen. Dies ist jedoch möglicherweise nicht möglich und kann zu Fehlern führen.

Wichtigkeit, Eigenschaften nicht zu teilen

Standardmäßig teilen Instanzen von WeatherWidget Eigenschaftswerte derselben Instanz von Widget. Dies kann zu unerwartetem Verhalten führen, da mehrere Instanzen von WeatherWidget die Eigenschaften der anderen überschreiben oder ändern können.

Um dies zu verhindern, wird empfohlen, einen „Dummy“-Konstruktor zu verwenden (z. B. Dummy.prototype = Widget.prototype). als Zwischenschritt, der einen neuen Prototyp für WeatherWidget erstellt, der keine Eigenschaftswerte von der übergeordneten Instanz erbt. Dadurch wird sichergestellt, dass jede WeatherWidget-Instanz über einen eigenen Satz geerbter Eigenschaften verfügt.

Alternative Ansätze in neueren JavaScript-Versionen

In ECMAScript 5 und höher können Sie Folgendes verwenden:

WeatherWidget.prototype = Object.create(Widget.prototype, {
  constructor: {value: WeatherWidget}
});

Dieser Ansatz hat den zusätzlichen Vorteil, dass die Konstruktoreigenschaft nicht beschreibbar, aufzählbar oder nicht beschreibbar ist konfigurierbar.

Expliziter Aufruf des übergeordneten Konstruktors

Möglicherweise müssen Sie den übergeordneten Konstruktor (z. B. Widget.apply(this, arguments)) explizit im untergeordneten Konstruktor aufrufen um das übergeordnete Element zu initialisieren Beispiel.

Fazit

Das Verständnis der Verwendung von „new“ in Derived.prototype = new Base ist entscheidend für die korrekte Implementierung der Vererbung in JavaScript. Es stellt sicher, dass untergeordnete Klassen vom richtigen Prototyp erben und verhindert die unbeabsichtigte gemeinsame Nutzung von Eigenschaftswerten zwischen Instanzen.

Das obige ist der detaillierte Inhalt vonWarum „new' in „Derived.prototype = new Base' für die JavaScript-Vererbung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn