Spec-Zone.ru › JavaScript

Reflect.set()

Baseline Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.

Статический метод Reflect.set() похож на аксессоры свойств и синтаксис присваивания, но реализован в виде функции.

Попробуйте

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"

Синтаксис

Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)

Параметры

target
Целевой объект, на котором нужно установить свойство.
propertyKey
Имя устанавливаемого свойства.
value
Значение, которое нужно установить.
receiver Необязательный
Значение this, предоставленное для вызова сеттера для propertyKey на target. Если указано и target не имеет сеттера для propertyKey, свойство будет установлено вместо этого на receiver. По умолчанию target.

Возвращаемое значение

Boolean, указывающий, была ли операция установки свойства успешной.

Исключения

TypeError
Возникает, если target не является объектом.

Описание

Reflect.set() предоставляет рефлексивную семантику доступа к свойствам. То есть, Reflect.set(target, propertyKey, value, receiver) семантически эквивалентен:

target[propertyKey] = value;

Обратите внимание, что при обычном доступе к свойствам target и receiver были бы наблюдаемо одним и тем же объектом.

Reflect.set() вызывает внутренний метод объекта [[Set]] для target.

Примеры

Использование 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 }

Различные target и receiver

Когда target и receiver отличаются, Reflect.set будет использовать дескриптор свойства target (для поиска сеттера или определения того, является ли свойство записываемым), но установит свойство на 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 }

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-reflect.set

Совместимость с браузерами

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
set
49
12
42
36
10
49
42
36
10
5.0
49
10
1.0.0
1.0
6.0.0

См. также

  • Polyfill of Reflect.set in core-js
  • Reflect
  • Аксессоры свойств
  • handler.set()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API