Heim > Artikel > Web-Frontend > Wie erleichtert die Metaeigenschaft „new.target“ die ES6-Klassenvererbung?
Grundlegendes zu „new.target“
Die ECMAScript 2015-Spezifikation führt eine Metaeigenschaft namens „new.target“ ein, die darin verwendet wird Nicht-Pfeil-Funktionen, um festzustellen, ob die Funktion als Konstruktor aufgerufen wurde.
Definition und Zweck
"new.target" bezieht sich auf die erste Metaeigenschaft und ist formal definiert in §12.3.8 der Spezifikation. Sein einziger Zweck besteht darin, den aktuellen Wert des internen Werts „[[NewTarget]]“ einer Funktion abzurufen. Dieser Wert wird beim Aufruf der Funktion festgelegt, ähnlich der „this“-Bindung.
Gemäß §8.1.1.3 Function Environment Records wird der „[[NewTarget]]“-Wert auf den „[[ Construct]]“ newTarget-Parameter, wenn die Funktion als Konstruktor aufgerufen wird. Andernfalls bleibt sein Wert undefiniert.
Wichtigkeit für ES6-Klassen
„new.target“ spielt eine entscheidende Rolle bei der Implementierung von ES6-Klassen und ermöglicht ihnen, von ihnen zu erben eingebaute Objekte. Beim Aufruf eines Klassenkonstruktors mit „new“ ist der „this“-Wert noch nicht initialisiert. Wenn jedoch die super()-Methode aufgerufen wird, wird das Objekt erstellt und so eingestellt, dass es vom „.prototype“ des „newTarget“-Konstruktors erbt.
Beispiel
Das folgende Beispiel zeigt, wie „new.target“ bei der Klassenvererbung verwendet wird:
class Parent { constructor() { // Implicit from super() call: new.target = Child // Implicit because Parent doesn't extend anything: // this = Object.create(new.target.prototype) console.log(new.target) // Child! } } class Child extends Parent { constructor() { // this is uninitialized (and would throw if accessed) // Implicit from new call: new.target = Child super() // this = Reflect.construct(Parent, [], new.target) console.log(this) } } new Child
In diesem Beispiel:
Das obige ist der detaillierte Inhalt vonWie erleichtert die Metaeigenschaft „new.target“ die ES6-Klassenvererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!