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 }
Спецификации
Совместимость с браузерами
| 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 |
См. также
© 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