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.
Das Reflect
Namespace-Objekt enthält statische Methoden zum Aufrufen von abfangbaren JavaScript-Objekt-internen Methoden. Die Methoden sind dieselben wie die der Proxy-Handler.
Beschreibung
Anders als die meisten globalen Objekte ist Reflect
kein Konstruktor. Sie können es weder mit dem new
-Operator verwenden noch das Reflect
-Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden von Reflect
sind statisch (genauso wie das Math
-Objekt).
Das Reflect
-Objekt bietet eine Sammlung von statischen Funktionen, die die gleichen Namen wie die Proxy-Handler-Methoden haben.
Der Hauptverwendungszweck von Reflect
besteht darin, das Standard-Sichtungsverhalten in Proxy
-Handler-Fallen bereitzustellen. Eine Falle wird verwendet, um eine Operation an einem Objekt abzufangen – sie bietet eine benutzerdefinierte Implementierung für eine Objekt-interne Methode. Die Reflect
API wird verwendet, um die entsprechende interne Methode aufzurufen. Zum Beispiel erstellt der folgende Code einen Proxy p
mit einer deleteProperty
-Falle, die die [[Delete]]
interne Methode abfängt. Reflect.deleteProperty()
wird verwendet, um das Standardverhalten von [[Delete]]
direkt auf targetObject
aufzurufen. Sie können es durch delete
ersetzen, aber die Verwendung von Reflect
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);
},
},
);
Die Reflect
-Methoden ermöglichen auch eine feinere Kontrolle darüber, wie die interne Methode aufgerufen wird. Zum Beispiel ist Reflect.construct()
der einzige Weg, eine Ziel-Funktion mit einem bestimmten new.target
-Wert zu konstruieren. Wenn Sie den new
-Operator verwenden, um eine Funktion aufzurufen, ist der new.target
Wert immer die Funktion selbst. Dies hat wichtige Auswirkungen bei Unterklassen. Ein weiteres Beispiel: Reflect.get()
ermöglicht es Ihnen, einen Getter mit einem benutzerdefinierten this
-Wert auszuführen, während Eigenschaftendefinitoren immer das aktuelle Objekt als this
-Wert verwenden.
Fast das Verhalten jeder Reflect
-Methode kann mit einer anderen Syntax oder Methode erreicht werden. Einige dieser Methoden haben entsprechende statische Methoden mit demselben Namen in Object
, obwohl es einige subtile Unterschiede gibt. Für die genauen Unterschiede siehe die Beschreibung jeder Reflect
-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, dertrue
ist, 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, dertrue
ist, 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, dertrue
ist, wenn das Update erfolgreich war. Reflect.set()
-
Eine Funktion, die Werte Eigenschaften zuweist. Gibt einen booleschen Wert zurück, der
true
ist, wenn das Update erfolgreich war. Reflect.setPrototypeOf()
-
Eine Funktion, die den Prototyp eines Objekts festlegt. Gibt einen booleschen Wert zurück, der
true
ist, 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");
// true
Reflect.has(duck, "haircut");
// false
Rü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> |
Browser-Kompatibilität
Loading…