Baseline Widely available
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.
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.
Reflect[Symbol.toStringTag]
Der Anfangswert der [Symbol.toStringTag]
-Eigenschaft ist der String "Reflect"
. Diese Eigenschaft wird in Object.prototype.toString()
verwendet.
Reflect.apply()
Ruft eine target
-Funktion mit Argumenten wie im argumentsList
-Parameter angegeben auf. Siehe auch Function.prototype.apply()
.
Reflect.construct()
Der new
-Operator als Funktion. Entspricht dem Aufruf von new target(...argumentsList)
. Ermöglicht auch die Angabe eines anderen Prototyps.
Reflect.defineProperty()
Ãhnlich wie Object.defineProperty()
. Gibt einen booleschen Wert zurück, der true
ist, wenn die Eigenschaft erfolgreich definiert wurde.
Reflect.deleteProperty()
Der delete
-Operator als Funktion. Entspricht dem Aufruf von delete 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, andernfalls undefined
.
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, der true
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, der true
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.
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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4