Proxy и Reflect в JavaScript: контроль над объектами

Proxy и Reflect в JavaScript: контроль над объектами


В JavaScript объекты обычно работают предсказуемо: мы читаем свойства, записываем их, удаляем и всё. Но иногда нужно перехватить эти операции: например, для валидации данных, логирования или защиты объекта.

Для этого есть Proxy и Reflect.


1. Что такое Proxy?

Proxy позволяет создать «обёртку» вокруг объекта и управлять его поведением через ловушки (traps).

Пример: логируем все обращения к свойствам:

const user = { name: 'Тигран', age: 20 };

const proxyUser = new Proxy(user, {
  get(target, prop) {
    console.log(`Чтение свойства: ${prop}`);
    return target[prop];
  },
  set(target, prop, value) {
    console.log(`Запись свойства: ${prop} = ${value}`);
    target[prop] = value;
    return true;
  }
});

console.log(proxyUser.name);  // Чтение свойства: name
proxyUser.age = 21;           // Запись свойства: age = 21

2. Для чего нужен Reflect?

Reflect — это встроенный объект, который содержит «чистые» методы для работы с объектами: getsethasdeleteProperty и др.

Обычно его используют внутри Proxy, чтобы аккуратно передавать управление.

Пример с валидацией:

const product = { price: 100 };

const proxyProduct = new Proxy(product, {
  set(target, prop, value) {
    if (prop === 'price' && value < 0) {
      throw new Error('Цена не может быть отрицательной!');
    }
    return Reflect.set(target, prop, value);
  }
});

proxyProduct.price = 200; // работает
proxyProduct.price = -50; // ошибка

3. Практические применения

  • Валидация (как в примере с ценой).
  • Логирование и отладка: можно отслеживать обращения к объектам.
  • Защита: сделать объект «read-only».
  • Реактивность: в Vue.js (Composition API) реактивные объекты сделаны через Proxy.

Итог

Proxy + Reflect = мощный инструмент для управления объектами. Это уровень «под капотом», который редко нужен в простых проектах, но даёт разработчику огромную гибкость.


Report Page