JavaScript Reflect.get() — прочитати властивість об'єкта
Метод Reflect.get() читає властивість об'єкта — функцією, а не оператором крапки.
Загальний опис
Для звичайного читання він зайвий: obj.key коротший і зрозуміліший.
Але є місце, де без нього не обійтись — пастка get у Proxy. Усередині неї треба виконати «те, що сталося б без посередника», і Reflect.get() робить це рівно одним рядком.
Третій аргумент receiver — саме те, заради чого це не можна замінити на target[key]. Він задає, що буде this всередині геттера. Без нього геттер отримає оригінал замість посередника — і зміни в об'єкті перестануть відстежуватись, тихо й непомітно.
- Порада
-
Усередині пастки
автор: NagarDProxyзавжди передавайreceiverтретім аргументом. Це та деталь, через яку реактивність працює або не працює.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| get | 49+ | 42+ | 10+ | 36+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| get | 49+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Чому receiver обов'язковий у пастці Proxy.
const user = {
first: 'Іван',
last: 'Петренко',
get full() {
return this.first + ' ' + this.last;
},
};
console.log(Reflect.get(user, 'first')); // 'Іван'
const proxy = new Proxy(user, {
get(target, key, receiver) {
console.log('читаємо', key);
// з receiver — геттер full теж піде крізь пастку
return Reflect.get(target, key, receiver);
// а так — ні: this всередині full став би оригіналом
// return target[key];
},
});
proxy.full; // «читаємо full», «читаємо first», «читаємо last»
Коментарі
Коментарів ще немає — будьте першим!