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 statische Methode Reflect.set()
ist wie der Property-Accessor und die Zuweisungssyntax, aber als Funktion.
Probieren Sie es aus
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 zu setzenden Eigenschaft.
value
-
Der Wert, der gesetzt werden soll.
receiver
Optional-
Der Wert von
this
, der für den Aufruf des Setzers fürpropertyKey
auftarget
bereitgestellt wird. Wenn angegeben undtarget
keinen Setzer fürpropertyKey
hat, wird die Eigenschaft stattdessen aufreceiver
gesetzt.
Rückgabewert
Ein Boolean
, der angibt, ob das Setzen der Eigenschaft erfolgreich war oder nicht.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
target
kein Objekt ist.
Beschreibung
Reflect.set()
bietet die reflexive Semantik eines Property-Zugriffs. Das heißt, Reflect.set(target, propertyKey, value, receiver)
ist semantisch gleichwertig mit:
target[propertyKey] = value;
Beachten Sie, dass bei einem normalen Property-Zugriff 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 }
Unterschiedliche target
und receiver
Wenn target
und receiver
unterschiedlich sind, verwendet Reflect.set
den Property-Deskriptor von target
(um den Setzer zu finden oder festzustellen, 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 Language Specification # sec-reflect.set |
Browser-Kompatibilität
BCD tables only load in the browser