Что такое Proxy в JavaScript и где его применяют?
Встретил в статье js proxy и совсем потерялся. Пишут, что это «перехват операций над объектом» — звучит как магия.
Что такое Proxy простыми словами, как его создать и зачем он нужен на практике? Не уверен, что новичку это надо, но любопытно разобраться.
2 ответа
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 в повседневной работе почти не нужен — это инструмент для библиотек и продвинутых приёмов. Но понимать, что «под капотом» популярных фреймворков лежит вот такая штука, полезно.
Если в двух словах: Proxy = объект-посредник. Все обращения сначала проходят через него, и ты можешь в этот момент вмешаться.
Самая частая практическая польза — поймать запись и проверить значение до того, как оно попадёт в объект. Грубо говоря, это способ повесить «охрану» на свойства. Для учебных задач почти не пригодится, но знать про существование стоит.