handler.set()

Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского

Метод 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 and proxy.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

Specifications

Спецификация Статус Комментарий
ECMAScript 2015 (6th Edition, ECMA-262)
Определение '[[Set]]' в этой спецификации.
Стандарт Initial definition.
ECMAScript (ECMA-262)
Определение '[[Set]]' в этой спецификации.
Живой стандарт

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 61 18 (18) ? ? 10.1
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? ? 18.0 (18) ? ? ?

Смотрите также