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 Reflect.set() statische Methode ist ähnlich der Eigenschafts-Accessor- und Zuweisungs-Syntax, aber als 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 Eigenschaft gesetzt werden soll.
propertyKey-
Der Name der Eigenschaft, die gesetzt werden soll.
value-
Der Wert, der gesetzt werden soll.
receiverOptional-
Der Wert von
this, der für den Aufruf des Setters fürpropertyKeyauftargetbereitgestellt wird. Wenn angegeben undtargetkeinen Setter fürpropertyKeyhat, wird die Eigenschaft stattdessen aufreceivergesetzt. Standardmäßigtarget.
Rückgabewert
Ein Boolean, das angibt, ob das Setzen der Eigenschaft erfolgreich war oder nicht.
Ausnahmen
TypeError-
Wird geworfen, wenn
targetkein Objekt ist.
Beschreibung
Reflect.set() bietet die reflektive Semantik eines Eigenschaftszugriffs. Das heißt, Reflect.set(target, propertyKey, value, receiver) ist semantisch äquivalent zu:
target[propertyKey] = value;
Beachten Sie, dass bei einem normalen Eigenschaftszugriff target und receiver beobachtbar dasselbe Objekt wären.
Reflect.set() ruft die [[Set]]-Objektinterne Methode 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 Eigenschaftsdeskriptor von target (um den Setter zu finden oder zu bestimmen, ob die Eigenschaft schreibbar ist), setzt aber die Eigenschaft 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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.set> |