← Все вопросы

Что такое Proxy в JavaScript и где его применяют?

Задан 26 месяцев назад747 просмотров2 ответа
3

Встретил в статье js proxy и совсем потерялся. Пишут, что это «перехват операций над объектом» — звучит как магия.

Что такое Proxy простыми словами, как его создать и зачем он нужен на практике? Не уверен, что новичку это надо, но любопытно разобраться.

2 ответа

8
✓ Принятый ответ — помог автору

Proxy — это «обёртка» вокруг объекта, которая позволяет перехватывать операции с ним: чтение свойства, запись, удаление и т.д. Ты задаёшь функции-перехватчики (их называют «ловушки», traps), и они срабатывают вместо обычного поведения.

Создаётся так: new Proxy(целевойОбъект, обработчик).

const user = { name: 'Аня', age: 20 };

const proxy = new Proxy(user, {
  get(target, prop) {
    if (prop in target) {
      return target[prop];
    }
    return `Свойства "${prop}" нет`;
  },

  set(target, prop, value) {
    if (prop === 'age' && value < 0) {
      throw new Error('Возраст не может быть отрицательным');
    }
    target[prop] = value;
    return true;   // обязательно вернуть true при успешной записи
  }
});

console.log(proxy.name);     // 'Аня'
console.log(proxy.email);    // 'Свойства "email" нет'
proxy.age = 25;              // ок
proxy.age = -5;              // выбросит ошибку

Что здесь происходит: обращение proxy.name не идёт напрямую в объект, а проходит через ловушку get. Запись proxy.age = ... проходит через set, где можно вставить валидацию.

Зачем на практике:

  • валидация данных при записи (как выше);
  • значения по умолчанию для отсутствующих свойств;
  • логирование всех обращений к объекту;
  • реактивность — именно на Proxy построена реактивность во Vue 3 (когда меняешь данные, интерфейс сам обновляется).

Ты прав, что новичку Proxy в повседневной работе почти не нужен — это инструмент для библиотек и продвинутых приёмов. Но понимать, что «под капотом» популярных фреймворков лежит вот такая штука, полезно.

2

Если в двух словах: Proxy = объект-посредник. Все обращения сначала проходят через него, и ты можешь в этот момент вмешаться.

Самая частая практическая польза — поймать запись и проверить значение до того, как оно попадёт в объект. Грубо говоря, это способ повесить «охрану» на свойства. Для учебных задач почти не пригодится, но знать про существование стоит.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект