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

js
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ür propertyKey auf target bereitgestellt wird. Wenn angegeben und target keinen Setzer für propertyKey hat, wird die Eigenschaft stattdessen auf receiver 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:

js
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()

js
// 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.

js
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

Siehe auch