handler.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.
Метод handler.set() является ловушкой для установки значения свойству.
Синтаксис
var p = new Proxy(target, {
set: function (target, property, value, receiver) {},
});
Параметры
Следующие параметры передаются методу set()
. this
привязан к обработчику
target
-
Исходный объект, который проксируется.
property
-
Имя свойства, в которое устанавливается значение
value
. value
-
Значение, устанавливаемое в свойство
property
. receiver
-
Объект, которому первоначально было присвоено задание. Обычно это сам прокси. Но обработчик
set()
также может быть вызван косвенно, через цепочку прототипов или различными другими способами. Например, предположим, что скрипт выполняетobj.name = "jen"
, при этомobj
не является прокси и не имеет собственного свойства.name
, но имеет прокси в цепочке прототипов. Будет вызван обработчик проксиset()
, аobj
будет передан в качестве получателя.
Возвращаемые результаты
Метод set
должен возвращать boolean значение.
- Возвращает
true
, если присвоение выполнено успешно. - Если метод
set()
возвращаетfalse
, а присваивание произошло в коде строгого режима, то будет выброшенаTypeError
.
Описание
Метод handler.set
является ловушкой для установки значения свойству.
Перехват
Эта ловушка может перехватывать следующие операции:
- Установка значения свойству:
proxy[foo] = bar
andproxy.foo = bar
- Установка значения наследованному свойству:
Object.create(proxy)[foo] = bar
Reflect.set()
Инварианты
Если нарушены следующие инварианты, то proxy выбросит TypeError
:
- Невозможно изменить значение свойства так, чтобы оно отличалось от значения соответствующего свойства целевого объекта, если соответствующее свойство целевого объекта не является доступным для записи и не настраиваемым свойством данных.
- Невозможно установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым свойством средства доступа, для которого в качестве атрибута [[Set]] указано значение undefined.
- В строгом режиме при возврате из обработчика
set()
значенияfalse
, будет выброшено исключениеTypeError
.
Примеры
Следующий код перехватывает установку значения свойству.
var p = new Proxy(
{},
{
set: function (target, prop, value, receiver) {
target[prop] = value;
console.log("property set: " + prop + " = " + value);
return true;
},
},
);
console.log("a" in p); // false
p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |
Совместимость с браузерами
BCD tables only load in the browser