Reflect.set()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
Die statische Methode Reflect.set() ähnelt der Syntax für Property-Zugriffe und Zuweisungen, ist jedoch eine Funktion.
Probieren Sie es aus
const object = {};
Reflect.set(object, "foo", 42);
console.log(object.foo);
// Expected output: 42
const array = ["duck", "duck", "duck"];
Reflect.set(array, 2, "goose");
console.log(array[2]);
// Expected output: "goose"
Syntax
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
Parameter
target-
Das Zielobjekt, auf dem die Property gesetzt werden soll.
propertyKey-
Der Name der Property, die gesetzt werden soll.
value-
Der zu setzende Wert.
receiverOptional-
Der Wert von
this, der beim Aufruf des Setters fürpropertyKeyauftargetverwendet wird. Wennreceiverangegeben ist undtargetkeinen Setter fürpropertyKeyhat, wird die Property stattdessen aufreceivergesetzt. Der Standardwert isttarget.
Rückgabewert
Ein Boolean-Wert, der angibt, ob das Setzen der Property erfolgreich war.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
targetkein Objekt ist.
Beschreibung
Reflect.set() stellt die reflektierende Semantik eines Property-Zugriffs bereit. Das heißt, Reflect.set(target, propertyKey, value, receiver) ist semantisch äquivalent zu:
target[propertyKey] = value;
Beachten Sie, dass target und receiver bei einem normalen Property-Zugriff beobachtbar dasselbe Objekt wären.
Reflect.set() ruft die objektinterne Methode [[Set]] von target auf.
Beispiele
>Reflect.set() verwenden
// 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 }
Unterschiedliche Werte für target und receiver
Wenn target und receiver unterschiedlich sind, verwendet Reflect.set den Property-Deskriptor von target, um den Setter zu finden oder festzustellen, ob die Property beschreibbar ist. Die Property wird jedoch auf receiver gesetzt.
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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.set> |