JavaScript Reflect — методи роботи з об'єктами
Reflect — вбудований об'єкт, що зібрав операції над об'єктами у вигляді звичайних функцій: Reflect.get(), Reflect.set(), Reflect.has().
Загальний опис
Ці операції в мові були завжди, але жили як оператори: obj.key, key in obj, delete obj.key. Оператор не передаси в іншу функцію й не викличеш динамічно.
Reflect дає їм нормальну функціональну форму. Але справжня причина його існування — Proxy: усередині пастки треба виконати «те, що сталося б без посередника», і Reflect робить це рівно одним рядком, з правильним this і без ручного відтворення поведінки.
Імена методів Reflect збігаються з іменами пасток Proxy один в один — це не збіг, вони спроєктовані парою.
- Порада
-
Усередині пастки
автор: NagarDProxyзавжди повертайReflect.<та сама операція>(...arguments)— це найкоротший і найправильніший спосіб не зламати типову поведінку.
Синтаксис
Reflect.get(target, key);
методи
| Метод | Опис |
|---|---|
| get | Читає властивість об'єкта. |
| set | Записує властивість об'єкта. |
| has | Аналог оператора in. |
| deleteProperty | Аналог оператора delete. |
| ownKeys | Усі власні ключі об'єкта, включно з символами. |
| apply | Викликає функцію з заданими this та аргументами. |
| construct | Аналог оператора new. |
| defineProperty | Визначає властивість; повертає true/false замість винятку. |
| getPrototypeOf | Повертає прототип об'єкта. |
| setPrototypeOf | Встановлює прототип об'єкта. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Reflect | 49+ | 42+ | 10+ | 36+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| Reflect | 49+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Reflect у парі з Proxy: логуємо звертання, нічого не ламаючи.
const target = { name: 'Іван', age: 30 };
console.log(Reflect.has(target, 'name')); // true — те саме, що 'name' in target
console.log(Reflect.ownKeys(target)); // ['name', 'age']
// у пастці — типова поведінка одним рядком
const logged = new Proxy(target, {
get(obj, key, receiver) {
console.log('читаємо', key);
return Reflect.get(obj, key, receiver);
},
});
logged.name; // «читаємо name» → 'Іван'
Коментарі
Коментарів ще немає — будьте першим!