Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

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

receiver Optional

Der Wert von this, der beim Aufruf des Setters für propertyKey auf target verwendet wird. Wenn receiver angegeben ist und target keinen Setter für propertyKey hat, wird die Property stattdessen auf receiver gesetzt. Der Standardwert ist target.

Rückgabewert

Ein Boolean-Wert, der angibt, ob das Setzen der Property erfolgreich war.

Ausnahmen

TypeError

Wird ausgelöst, wenn target kein 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:

js
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

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

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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-reflect.set

Browser-Kompatibilität

Siehe auch