Heim > Artikel > Web-Frontend > Wie ermöglicht „new.target“ die Vererbung und die Differenzierung von Konstruktoraufrufen in ES6-Klassen?
Obwohl „new.target“ in der ECMAScript 2015-Spezifikation nur dreimal erwähnt wird, ist es so eine in §12.3.8 definierte Metaeigenschaft.
„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.
„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.
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:
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!