handler.set()
Метод handler.set() является ловушкой для установки значения свойству.
Синтаксис
js
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()
(en-US)
Инварианты
Если нарушены следующие инварианты, то proxy выбросит TypeError
:
- Невозможно изменить значение свойства так, чтобы оно отличалось от значения соответствующего свойства целевого объекта, если соответствующее свойство целевого объекта не является доступным для записи и не настраиваемым свойством данных.
- Невозможно установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым свойством средства доступа, для которого в качестве атрибута [[Set]] указано значение undefined.
- В строгом режиме при возврате из обработчика
set()
значенияfalse
, будет выброшено исключениеTypeError
.
Примеры
Следующий код перехватывает установку значения свойству.
js
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
Specifications
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение '[[Set]]' в этой спецификации. |
Стандарт | Initial definition. |
ECMAScript (ECMA-262) Определение '[[Set]]' в этой спецификации. |
Живой стандарт |
Совместимость с браузерами
BCD tables only load in the browser