Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
Die statische Methode Reflect.construct() ist wie der new Operator, aber als Funktion. Sie ist gleichbedeutend mit dem Aufruf von new target(...args). Zusätzlich ermöglicht es die Angabe eines anderen new.target-Werts.
Die Zielfunktion, die aufgerufen werden soll.
argumentsListEin array-ähnliches Objekt, das die Argumente angibt, mit denen target aufgerufen werden soll.
newTarget OptionalDer Wert des new.target-Ausdrucks innerhalb von target. Standardmäßig target. Im Allgemeinen (siehe Beispiel) gibt target die Logik zur Initialisierung des Objekts an, während newTarget.prototype das Prototyp des konstruierten Objekts spezifiziert.
Eine neue Instanz von target (oder newTarget, falls vorhanden), initialisiert durch target als Konstruktor mit der angegebenen argumentsList.
Wird ausgelöst, wenn target oder newTarget kein Konstruktor ist, oder wenn argumentsList kein Objekt ist.
Reflect.construct() bietet die reflektive Semantik eines Konstruktoraufrufs. Das heißt, Reflect.construct(target, argumentsList, newTarget) ist semantisch gleichbedeutend mit:
Beachten Sie, dass bei Verwendung des new Operators target und newTarget immer derselbe Konstruktor sind — aber Reflect.construct() ermöglicht es, einen anderen new.target-Wert zu übergeben. Konzeptionell ist newTarget die Funktion, bei der new aufgerufen wurde, und newTarget.prototype wird das Prototyp des konstruierten Objekts; während target der Konstruktor ist, der tatsächlich ausgeführt wird, um das Objekt zu initialisieren. Zum Beispiel kann new.target auch anders sein als der aktuell ausgeführte Konstruktor bei der Vererbung von Klassen.
Reflect.construct() ermöglicht es Ihnen, einen Konstruktor mit einer variablen Anzahl von Argumenten aufzurufen. (Dies ist auch mit der Spread-Syntax bei einem normalen Konstruktoraufruf möglich.)
Reflect.construct() ruft die [[Construct]] interne Objektmethode von target auf.
Wenn newTarget übergeben wird, ändert sich der Wert von new.target im Konstruktor. Das konstruierte Objekt wird eine Instanz von newTarget sein, nicht target.
Natürlich gibt es keine starke Garantie über die Prototypkette des konstruierten Objekts, da dies von der Implementierung des Konstruktors abhängt. Zum Beispiel, wenn der target Konstruktor ein Objekt zurückgibt, dann wird dieses Objekt das konstruierte Objekt sein, unabhängig vom newTarget Wert. Wenn target ein Proxy mit einer construct Falle ist, dann kontrolliert die Falle vollständig den Konstruktionsprozess.
Ein gültiges new.target sollte eine Konstruktorfunktion mit einer prototype-Eigenschaft sein, aber letzteres wird nicht erzwungen. Wenn der Wert der prototype Eigenschaft kein Objekt ist, erbt das initialisierte Objekt von Object.prototype.
Vor der Einführung von Reflect konnten Objekte mit einer beliebigen Kombination von Konstruktoren und Prototypen unter Verwendung von Object.create() konstruiert werden.
Obwohl das Endergebnis dasselbe ist, gibt es einen wichtigen Unterschied im Prozess. Bei der Verwendung von Object.create() und Function.prototype.apply() zeigt der new.target Operator innerhalb der Funktion, die als Konstruktor verwendet wird, auf undefined, da das new Schlüsselwort nicht verwendet wird, um das Objekt zu erstellen. (Tatsächlich verwendet es die apply-Semantik, nicht construct, obwohl normale Funktionen fast gleich funktionieren.)
Beim Aufruf von Reflect.construct() hingegen zeigt der new.target Operator auf den newTarget Parameter, falls angegeben, oder auf target, wenn nicht.
| ECMAScript® 2027 Language Specification # sec-reflect.construct |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.