Heim  >  Artikel  >  Web-Frontend  >  Wie ermöglicht „new.target“ die Vererbung und die Differenzierung von Konstruktoraufrufen in ES6-Klassen?

Wie ermöglicht „new.target“ die Vererbung und die Differenzierung von Konstruktoraufrufen in ES6-Klassen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 11:53:29466Durchsuche

How does `new.target` Enable Inheritance and Differentiate Constructor Calls in ES6 Classes?

Verstehen von „new.target“

Definition und Ort

Obwohl „new.target“ in der ECMAScript 2015-Spezifikation nur dreimal erwähnt wird, ist es so eine in §12.3.8 definierte Metaeigenschaft.

Zweck und Verwendung

„NewTarget“ ruft den Wert der internen Eigenschaft [[NewTarget]] der aktuellen Funktionsumgebung ab. Dieser Wert wird festgelegt, wenn eine Funktion als Konstruktor aufgerufen wird.

Wenn eine Funktion mit new aufgerufen wurde, verweist new.target auf die Konstruktorfunktion, die zum Erstellen der neuen Instanz verwendet wurde. Dadurch können Entwickler zwischen Konstruktor- und normalen Funktionsaufrufen unterscheiden.

Bedeutung für ES6-Klassen

„NewTarget“ spielt in ES6-Klassen eine entscheidende Rolle. Wenn ein Klassenkonstruktor mit new aufgerufen wird, gibt er diesen zurück, der zunächst nicht initialisiert ist. super() initialisiert dies jedoch, indem es den übergeordneten Konstruktor aufruft und gleichzeitig new.target als Argument übergibt.

Dieser Mechanismus ermöglicht es Klassen, von integrierten Objekten wie Array oder Map zu erben. Durch die Übergabe von new.target an den übergeordneten Konstruktor wird die richtige Prototypenkette eingerichtet und sichergestellt, dass die neue Instanz vom entsprechenden Prototypenobjekt erbt.

Beispiel

Bedenken Sie die folgende Klassenstruktur:

class Parent {
  constructor() {
    // new.target = Child (from super() call)
    console.log(new.target);
  }
}

class Child extends Parent {
  constructor() {
    // new.target = Child (from new call)
    super();
    console.log(this);
  }
}

new Child;

In diesem Beispiel ist new.target:

  • Child im Parent-Konstruktor (vom super()-Aufruf aufgerufen)
  • Child im Child-Konstruktor (aufgerufen mit new)

Die Ausgabe wird sein:

Child
{ __proto__: Child.prototype }

Dies zeigt, wie new.target verwendet werden kann, um zwischen Konstruktor- und normalen Funktionsaufrufen zu unterscheiden Verwalten Sie die Vererbung in ES6-Klassen.

Das obige ist der detaillierte Inhalt vonWie ermöglicht „new.target“ die Vererbung und die Differenzierung von Konstruktoraufrufen in ES6-Klassen?. 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