JavaScript Reflect — методи роботи з об'єктами


Reflect — вбудований об'єкт, що зібрав операції над об'єктами у вигляді звичайних функцій: Reflect.get(), Reflect.set(), Reflect.has().

автор: NagarD

Загальний опис

Ці операції в мові були завжди, але жили як оператори: obj.key, key in obj, delete obj.key. Оператор не передаси в іншу функцію й не викличеш динамічно.

Reflect дає їм нормальну функціональну форму. Але справжня причина його існування — Proxy: усередині пастки треба виконати «те, що сталося б без посередника», і Reflect робить це рівно одним рядком, з правильним this і без ручного відтворення поведінки.

Імена методів Reflect збігаються з іменами пасток Proxy один в один — це не збіг, вони спроєктовані парою.

автор: NagarD

Порада

Усередині пастки Proxy завжди повертай Reflect.<та сама операція>(...arguments) — це найкоротший і найправильніший спосіб не зламати типову поведінку.

автор: NagarD

Синтаксис

Reflect.get(target, key);

методи

Метод Опис
get Читає властивість об'єкта.
set Записує властивість об'єкта.
has Аналог оператора in.
deleteProperty Аналог оператора delete.
ownKeys Усі власні ключі об'єкта, включно з символами.
apply Викликає функцію з заданими this та аргументами.
construct Аналог оператора new.
defineProperty Визначає властивість; повертає true/false замість винятку.
getPrototypeOf Повертає прототип об'єкта.
setPrototypeOf Встановлює прототип об'єкта.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Reflect 49+ 42+ 10+ 36+ 12+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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» → 'Іван'
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід