Ответ 1
Приемник - это объект, в котором происходит поиск свойств.
Итак, если вы используете a.jump
, a
- приемник.
Концепция применима только в том случае, если вы можете выполнить произвольный код, когда происходит поиск этого свойства. В основном это означает:
-
Свойства аксессуаров.
Вы можете получить доступ к ресиверу, используя
this
внутри приемника или сеттера. Обычно приемником является объект, в котором вы определили свойство, или другой объект, который наследуется от него.var target = { get getReceiver() { return this; } }; target.getReceiver; // target var inherits = Object.create(target); inherits.getReceiver; // inherits
Встроенный пример
__proto__
, определяемый как свойствоObject.prototype
, но ожидаемый для его получения или установки на других объектах (получателях). -
Объекты прокси
Объекты прокси позволяют определять ловушки
get
илиset
, которые запускают функцию при попытке получить или установить любое свойство в прокси. Приемник предоставляется в качестве аргумента этой функции. Приемник обычно будет сам объект Proxy или объект, который наследует его.var proxy = new Proxy({}, { get: function(target, property, receiver) { return receiver; } }); proxy.getReceiver; // proxy var inherits = Object.create(proxy); inherits.getReceiver; // inherits
Обратите внимание, что вы можете использовать Reflect.get
или Reflect.set
указать произвольные приемники:
Reflect.get(target, "getReceiver", arbitraryValue); // arbitraryValue ¹
Reflect.get(proxy, "getReceiver", arbitraryValue); // arbitraryValue
¹ Если геттер был определен в нестрочном режиме, он будет Object(arbitraryValue)
.
Название "приемник" исходит из спецификации, см. "Внутренние методы и внутренние слоты"
[[Get]] & emsp; (свойствоKey, Receiver) → any
Возвращает значение свойства, ключ которого - свойствоKey из этого объекта. Если какой-либо код ECMAScript должен быть выполнен для извлечения значение свойства, приемник используется как значение this, когда оценивая код.
[[Set]] & emsp; (свойствоKey, значение, Receiver) → Boolean
Задайте значение свойства, ключ которого является значением свойстваKey. Если для установки значения свойства необходимо выполнить какой-либо код ECMAScript, При оценке кода приемник используется как this. Возвращает true, если значение свойства было установлено или false, если оно не удалось установить.