Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Reflect
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
DasReflect Namespace-Objekt enthält statische Methoden zum Aufrufen von abfangbaren JavaScript-Objekt-internen Methoden. Die Methoden sind dieselben wie die derProxy-Handler.
In diesem Artikel
Beschreibung
Anders als die meisten globalen Objekte istReflect kein Konstruktor. Sie können es weder mit demnew-Operator verwenden noch dasReflect-Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden vonReflect sind statisch (genauso wie dasMath-Objekt).
DasReflect-Objekt bietet eine Sammlung von statischen Funktionen, die die gleichen Namen wie dieProxy-Handler-Methoden haben.
Der Hauptverwendungszweck vonReflect besteht darin, das Standard-Sichtungsverhalten inProxy-Handler-Fallen bereitzustellen. EineFalle wird verwendet, um eine Operation an einem Objekt abzufangen – sie bietet eine benutzerdefinierte Implementierung für eineObjekt-interne Methode. DieReflect API wird verwendet, um die entsprechende interne Methode aufzurufen. Zum Beispiel erstellt der folgende Code einen Proxyp mit einerdeleteProperty-Falle, die die[[Delete]] interne Methode abfängt.Reflect.deleteProperty() wird verwendet, um das Standardverhalten von[[Delete]] direkt auftargetObject aufzurufen. Sie können es durchdelete ersetzen, aber die Verwendung vonReflect erspart Ihnen, sich an die Syntax zu erinnern, die jeder internen Methode entspricht.
const p = new Proxy( {}, { deleteProperty(targetObject, property) { // Custom functionality: log the deletion console.log("Deleting property:", property); // Execute the default introspection behavior return Reflect.deleteProperty(targetObject, property); }, },);DieReflect-Methoden ermöglichen auch eine feinere Kontrolle darüber, wie die interne Methode aufgerufen wird. Zum Beispiel istReflect.construct() der einzige Weg, eine Ziel-Funktion mit einem bestimmtennew.target-Wert zu konstruieren. Wenn Sie dennew-Operator verwenden, um eine Funktion aufzurufen, ist dernew.target Wert immer die Funktion selbst. Dies hat wichtige Auswirkungen beiUnterklassen. Ein weiteres Beispiel:Reflect.get() ermöglicht es Ihnen, einenGetter mit einem benutzerdefiniertenthis-Wert auszuführen, währendEigenschaftendefinitoren immer das aktuelle Objekt alsthis-Wert verwenden.
Fast das Verhalten jederReflect-Methode kann mit einer anderen Syntax oder Methode erreicht werden. Einige dieser Methoden haben entsprechende statische Methoden mit demselben Namen inObject, obwohl es einige subtile Unterschiede gibt. Für die genauen Unterschiede siehe die Beschreibung jederReflect-Methode.
Statische Eigenschaften
Reflect[Symbol.toStringTag]Der Anfangswert der
[Symbol.toStringTag]-Eigenschaft ist der String"Reflect". Diese Eigenschaft wird inObject.prototype.toString()verwendet.
Statische Methoden
Reflect.apply()Ruft eine
target-Funktion mit Argumenten wie imargumentsList-Parameter angegeben auf. Siehe auchFunction.prototype.apply().Reflect.construct()Der
new-Operator als Funktion. Entspricht dem Aufruf vonnew target(...argumentsList). Ermöglicht auch die Angabe eines anderen Prototyps.Reflect.defineProperty()Ähnlich wie
Object.defineProperty(). Gibt einen booleschen Wert zurück, dertrueist, wenn die Eigenschaft erfolgreich definiert wurde.Reflect.deleteProperty()Der
delete-Operator als Funktion. Entspricht dem Aufruf vondelete target[propertyKey].Reflect.get()Gibt den Wert der Eigenschaft zurück. Funktioniert wie das Holen einer Eigenschaft von einem Objekt (
target[propertyKey]) als Funktion.Reflect.getOwnPropertyDescriptor()Ähnlich wie
Object.getOwnPropertyDescriptor(). Gibt einen Eigenschaftsbeschreiber der angegebenen Eigenschaft zurück, wenn er im Objekt existiert, andernfallsundefined.Reflect.getPrototypeOf()Gleich wie
Object.getPrototypeOf().Reflect.has()Gibt einen booleschen Wert zurück, der angibt, ob das Ziel die Eigenschaft hat. Entweder als eigene oder geerbte. Funktioniert wie der
in-Operator als Funktion.Reflect.isExtensible()Gleich wie
Object.isExtensible(). Gibt einen booleschen Wert zurück, dertrueist, wenn das Ziel erweiterbar ist.Reflect.ownKeys()Gibt ein Array der eigenen (nicht geerbten) Eigenschaftsschlüssel des Zielobjekts zurück.
Reflect.preventExtensions()Ähnlich wie
Object.preventExtensions(). Gibt einen booleschen Wert zurück, dertrueist, wenn das Update erfolgreich war.Reflect.set()Eine Funktion, die Werte Eigenschaften zuweist. Gibt einen booleschen Wert zurück, der
trueist, wenn das Update erfolgreich war.Reflect.setPrototypeOf()Eine Funktion, die den Prototyp eines Objekts festlegt. Gibt einen booleschen Wert zurück, der
trueist, wenn das Update erfolgreich war.
Beispiele
>Erkennen, ob ein Objekt bestimmte Eigenschaften enthält
const duck = { name: "Maurice", color: "white", greeting() { console.log(`Quaaaack! My name is ${this.name}`); },};Reflect.has(duck, "color");// trueReflect.has(duck, "haircut");// falseRückgabe der eigenen Schlüssel des Objekts
Reflect.ownKeys(duck);// [ "name", "color", "greeting" ]Hinzufügen einer neuen Eigenschaft zum Objekt
Reflect.set(duck, "eyes", "black");// returns "true" if successful// "duck" now contains the property "eyes: 'black'"Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-reflect-object> |