[ITEM 3] QUESTION: Що таке Reflect?
Вбудований об'єкт Reflect у JavaScript є глобальним об'єктом, який надає набір статичних методів для виконання перехоплюваних операцій над об'єктами. Концептуально методи Reflect дзеркально повторюють пастки об'єкта Proxy і служать для того, щоб спростити виконання стандартних операцій на кшталт читання властивостей, їх запису, перевірки наявності чи видалення.
Серед ключових методів Reflect можна виділити Reflect.get, Reflect.set, Reflect.has та Reflect.deleteProperty. Головна відмінність методів Reflect від старих операторів або методів Object полягає в типі значення, що повертається. Наприклад, оператор delete або метод Object.defineProperty у разі невдалої операції можуть викинути виняток або повернути неінтуїтивний результат, тоді як методи Reflect завжди повертають логічне значення boolean, що вказує на успішність чи неуспіх операції.
Reflect тісно пов'язаний з об'єктом Proxy і створювався багато в чому для спільного використання з ним. Коли ви перехоплюєте операцію в Proxy-обробнику, стандартною практикою є делегування цієї операції оригінальному об'єкту за допомогою відповідного методу Reflect. Це забезпечує передбачувану поведінку коду, правильну передачу контексту та сумісність із внутрішніми слотами об'єктів.
Окрім роботи з Proxy, Reflect пропонує більш явний, функціональний та уніфікований API для повсякденної роботи з метаданими об'єктів. Наприклад, перевірка наявності властивості через Reflect.has(target, propertyKey) виглядає чистішою та сучаснішою, ніж використання оператора 'in' у деяких складних патернах проєктування, роблячи код більш читабельним і легкопідтримуваним у межах великих командних проєктів.