HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
View in English Always switch to English
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
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.
Reflect
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).
new
Math
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.
Proxy
p
deleteProperty
[[Delete]]
Reflect.deleteProperty()
targetObject
delete
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.
Reflect.construct()
new.target
Reflect.get()
this
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.
Object
Reflect[Symbol.toStringTag]
Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "Reflect". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
[Symbol.toStringTag]
"Reflect"
Object.prototype.toString()
Reflect.apply()
Ruft eine target-Funktion mit Argumenten wie im argumentsList-Parameter angegeben auf. Siehe auch Function.prototype.apply().
target
argumentsList
Function.prototype.apply()
Der new-Operator als Funktion. Entspricht dem Aufruf von new target(...argumentsList). Ermöglicht auch die Angabe eines anderen Prototyps.
new target(...argumentsList)
Reflect.defineProperty()
Ähnlich wie Object.defineProperty(). Gibt einen booleschen Wert zurück, der true ist, wenn die Eigenschaft erfolgreich definiert wurde.
Object.defineProperty()
true
Der delete-Operator als Funktion. Entspricht dem Aufruf von delete target[propertyKey].
delete target[propertyKey]
Gibt den Wert der Eigenschaft zurück. Funktioniert wie das Holen einer Eigenschaft von einem Objekt (target[propertyKey]) als Funktion.
target[propertyKey]
Reflect.getOwnPropertyDescriptor()
Ähnlich wie Object.getOwnPropertyDescriptor(). Gibt einen Eigenschaftsbeschreiber der angegebenen Eigenschaft zurück, wenn er im Objekt existiert, andernfalls undefined.
Object.getOwnPropertyDescriptor()
undefined
Reflect.getPrototypeOf()
Gleich wie Object.getPrototypeOf().
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.
in
Reflect.isExtensible()
Gleich wie Object.isExtensible(). Gibt einen booleschen Wert zurück, der true ist, wenn das Ziel erweiterbar ist.
Object.isExtensible()
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, der true ist, wenn das Update erfolgreich war.
Object.preventExtensions()
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.
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
Reflect.ownKeys(duck); // [ "name", "color", "greeting" ]
Reflect.set(duck, "eyes", "black"); // returns "true" if successful // "duck" now contains the property "eyes: 'black'"
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.