Reflect.set()
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 Reflect.set()
statische Methode ist vergleichbar mit dem Property Accessor und der Zuweisungs-Syntax, jedoch in Form einer Funktion.
Probieren Sie es aus
const object1 = {};
Reflect.set(object1, "property1", 42);
console.log(object1.property1);
// Expected output: 42
const array1 = ["duck", "duck", "duck"];
Reflect.set(array1, 2, "goose");
console.log(array1[2]);
// Expected output: "goose"
Syntax
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
Parameter
target
-
Das Zielobjekt, auf dem die Eigenschaft gesetzt wird.
propertyKey
-
Der Name der Eigenschaft, die gesetzt werden soll.
value
-
Der zu setzende Wert.
receiver
Optional-
Der Wert von
this
, der für den Aufruf des Setters fürpropertyKey
auftarget
bereitgestellt wird. Falls angegeben undtarget
keinen Setter fürpropertyKey
besitzt, wird die Eigenschaft stattdessen aufreceiver
gesetzt.
Rückgabewert
Ein Boolean
, der angibt, ob das Setzen der Eigenschaft erfolgreich war.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
target
kein Objekt ist.
Beschreibung
Reflect.set()
bietet die reflexive Semantik eines Property Access. Das heißt, Reflect.set(target, propertyKey, value, receiver)
ist semantisch äquivalent zu:
target[propertyKey] = value;
Beachten Sie, dass bei einem normalen Property Access target
und receiver
beobachtbar dasselbe Objekt wären.
Reflect.set()
ruft die [[Set]]
interne Objektmethode von target
auf.
Beispiele
Verwendung von Reflect.set()
// Object
const obj = {};
Reflect.set(obj, "prop", "value"); // true
obj.prop; // "value"
// Array
const arr = ["duck", "duck", "duck"];
Reflect.set(arr, 2, "goose"); // true
arr[2]; // "goose"
// It can truncate an array.
Reflect.set(arr, "length", 1); // true
arr; // ["duck"]
// With just one argument, propertyKey and value are "undefined".
Reflect.set(obj); // true
Reflect.getOwnPropertyDescriptor(obj, "undefined");
// { value: undefined, writable: true, enumerable: true, configurable: true }
Unterschiedliches Ziel und Empfänger
Wenn target
und receiver
unterschiedlich sind, verwendet Reflect.set
den Property Descriptor von target
(zum Finden des Setters oder zum Bestimmen, ob die Eigenschaft beschreibbar ist), setzt die Eigenschaft jedoch auf receiver
.
const target = {};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is {}; receiver is { a: 2 }
const target = { a: 1 };
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is { a: 1 }; receiver is { a: 2 }
const target = {
set a(v) {
this.b = v;
},
};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is { a: [Setter] }; receiver is { b: 2 }
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-reflect.set |