Reflect.defineProperty()
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.
Die statische Methode Reflect.defineProperty()
ähnelt Object.defineProperty()
, gibt jedoch einen Boolean
zurück.
Probieren Sie es aus
const object1 = {};
if (Reflect.defineProperty(object1, "property1", { value: 42 })) {
console.log("property1 created!");
// Expected output: "property1 created!"
} else {
console.log("problem creating property1");
}
console.log(object1.property1);
// Expected output: 42
Syntax
Reflect.defineProperty(target, propertyKey, attributes)
Parameter
target
-
Das Zielobjekt, auf dem die Eigenschaft definiert werden soll.
propertyKey
-
Der Name der zu definierenden oder zu ändernden Eigenschaft.
attributes
-
Die Attribute für die zu definierende oder zu ändernde Eigenschaft.
Rückgabewert
Ein Boolean-Wert, der angibt, ob die Eigenschaft erfolgreich definiert wurde oder nicht.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
target
oderattributes
kein Objekt ist.
Beschreibung
Reflect.defineProperty()
bietet die reflektive Semantik zur Definition einer eigenen Eigenschaft auf einem Objekt. Auf sehr niedrigem Niveau gibt die Definition einer Eigenschaft einen Boolean-Wert zurück (wie es auch beim Proxy-Handler der Fall ist). Object.defineProperty()
bietet nahezu dieselbe Semantik, wirft jedoch einen TypeError
, wenn der Status false
ist (die Operation war nicht erfolgreich), während Reflect.defineProperty()
den Status direkt zurückgibt.
Viele eingebaute Operationen definieren ebenfalls Eigeneigenschaften auf Objekten. Der wichtigste Unterschied zwischen dem Definieren von Eigenschaften und dem Setzen von Eigenschaften ist, dass dabei keine Setter aufgerufen werden. Zum Beispiel definieren Klassenfelder direkt Eigenschaften auf der Instanz, ohne Setter aufzurufen.
class B extends class A {
set a(v) {
console.log("Setter called");
}
} {
a = 1; // Nothing logged
}
Reflect.defineProperty()
ruft die Methode [[DefineOwnProperty]]
der internen Objektmethoden auf dem Zielobjekt target
auf.
Beispiele
Verwendung von Reflect.defineProperty()
const obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
console.log(obj.x); // 7
Überprüfen, ob die Eigenschaft erfolgreich definiert wurde
Mit Object.defineProperty()
, das ein Objekt zurückgibt, wenn erfolgreich, oder einen TypeError
auslöst, wenn nicht, würden Sie einen try...catch
-Block verwenden, um Fehler beim Definieren einer Eigenschaft zu behandeln.
Da Reflect.defineProperty()
einen Boolean-Status der Ausführung zurückgibt, können Sie hier einfach einen if...else
-Block verwenden:
if (Reflect.defineProperty(target, property, attributes)) {
// success
} else {
// failure
}
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-reflect.defineproperty |
Browser-Kompatibilität
BCD tables only load in the browser