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() ist ähnlich wie Object.defineProperty(), gibt aber 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

js
Reflect.defineProperty(target, propertyKey, attributes)

Parameter

target

Das Zielobjekt, auf dem die Eigenschaft definiert werden soll.

propertyKey

Der Name der zu definierenden oder zu modifizierenden Eigenschaft.

attributes

Die Attribute für die zu definierende oder zu modifizierende Eigenschaft.

Rückgabewert

Ein booleanes Wert, der angibt, ob die Eigenschaft erfolgreich definiert wurde oder nicht.

Ausnahmen

TypeError

Wird ausgelöst, wenn target oder attributes kein Objekt ist.

Beschreibung

Reflect.defineProperty() bietet die reflektive Semantik für das Definieren einer eigenen Eigenschaft auf einem Objekt. Auf sehr niedrigem Niveau gibt das Definieren einer Eigenschaft einen booleschen Wert zurück (wie es auch bei dem 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 würden ebenfalls eigene Eigenschaften auf Objekten definieren. Der bedeutendste Unterschied zwischen dem Definieren von Eigenschaften und dem Setzen von ihnen ist, dass Setter nicht aufgerufen werden. Beispielsweise definieren Klassenfelder direkt Eigenschaften auf der Instanz, ohne Setter aufzurufen.

js
class B extends class A {
  set a(v) {
    console.log("Setter called");
  }
} {
  a = 1; // Nothing logged
}

Reflect.defineProperty() ruft die [[DefineOwnProperty]] interne Objektmethode des target auf.

Beispiele

Verwendung von Reflect.defineProperty()

js
const obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
console.log(obj.x); // 7

Überprüfen, ob die Eigenschaftsdefinition erfolgreich war

Mit Object.defineProperty(), das ein Objekt zurückgibt, wenn es erfolgreich ist, oder einen TypeError wirft, falls nicht, würden Sie einen try...catch-Block verwenden, um einen eventuell aufgetretenen Fehler abzufangen, während Sie eine Eigenschaft definieren.

Da Reflect.defineProperty() einen booleschen Erfolgsstatus zurückgibt, können Sie hier einfach einen if...else-Block verwenden:

js
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-reflect.defineproperty

Browser-Kompatibilität

Siehe auch