Skip to main content

Що робить Reflect?

Що таке Reflect

Reflect - це вбудований об'єкт, який містить набір допоміжних методів для роботи з об'єктами: доступ до властивостей, їх видалення, створення, виклик функцій тощо.

Простіше кажучи: Reflect - це набір "безпечних" аналогів операторів JS (in, delete, [], Object.defineProperty() тощо), зібраний в одному місці.


Основні цілі Reflect:

  1. Єдиний інтерфейс для низькорівневих операцій над об'єктами → замість різних операторів і функцій (delete, in, Object.defineProperty тощо)
  2. Робота в парі з Proxy → щоб ви могли делегувати дії назад до оригінального об'єкта.
  3. Більш передбачувана поведінка → методи повертають true/false, не викидаючи помилок, якщо операція неможлива.

Приклади популярних методів Reflect

МетодЩо робитьАналог без Reflect
Reflect.get(obj, prop)Повертає значення властивостіobj[prop]
Reflect.set(obj, prop, value)Встановлює значення властивостіobj[prop] = value
Reflect.has(obj, prop)Перевіряє наявність властивості"prop" in obj
Reflect.deleteProperty(obj, prop)Видаляє властивістьdelete obj[prop]
Reflect.ownKeys(obj)Повертає всі ключі (включно з Symbol)Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))
Reflect.defineProperty(obj, prop, desc)Визначає властивістьObject.defineProperty(obj, prop, desc)
Reflect.getOwnPropertyDescriptor(obj, prop)Отримує дескриптор властивостіObject.getOwnPropertyDescriptor(obj, prop)
Reflect.apply(fn, thisArg, argsArray)Викликає функцію з контекстом і аргументамиfn.apply(thisArg, argsArray)
Reflect.construct(fn, argsArray)Створює екземпляр (як new fn(...))new fn(...argsArray)

Приклад використання

javascript
const user = { name: "Tim" }; console.log(Reflect.get(user, "name")); // "Tim" Reflect.set(user, "age", 25); console.log(user); // { name: "Tim", age: 25 } console.log(Reflect.has(user, "age")); // true Reflect.deleteProperty(user, "age"); console.log(Reflect.has(user, "age")); // false

Reflect і Proxy разом

Reflect часто використовують усередині пасток Proxy, щоб "пробросити" стандартну поведінку назад до цільового об'єкта (target).

Приклад:

javascript
const user = { name: "Tim" }; const proxy = new Proxy(user, { get(target, prop, receiver) { console.log(`Читання властивості: ${prop}`); // замість target[prop] безпечніше: return Reflect.get(target, prop, receiver); }, set(target, prop, value, receiver) { console.log(`Запис властивості: ${prop} = ${value}`); return Reflect.set(target, prop, value, receiver); } }); proxy.name; // Лог: Читання властивості: name proxy.age = 30; // Лог: Запис властивості: age = 30

Чому так роблять? Тому що Reflect гарантує коректну передачу this і внутрішнього контексту, на відміну від прямого звернення через target[prop].


Підсумок

ПунктОпис
Reflectвбудований об'єкт з методами для роботи з об'єктами
Метауніфікувати низькорівневі операції (читання, запис, видалення, створення тощо)
Особливістьбезпечні аналоги операторів, що повертають true/false замість помилок
Часто використовуєтьсяусередині пасток Proxy

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.