Что такое Proxy

Ответ

Proxy — это объект-обертка, который позволяет перехватывать и переопределять базовые операции для другого объекта (целевого объекта).

Пример:

const target = { name: 'John' };
const handler = {
  get(target, prop) {
    return prop in target ? target[prop] : 'Not found';
  }
};
const proxy = new Proxy(target, handler);

console.log(proxy.name); // 'John'
console.log(proxy.age);  // 'Not found'

Использование:

  • Валидация данных
  • Логирование обращений к объекту
  • Кэширование
  • Защита свойств объекта

Proxy поддерживает перехват множества операций: чтение (get), запись (set), удаление (deleteProperty) и другие.

Ответ 18+ 🔞

Слушай, а вот есть такая штука — Proxy. Представь себе, блядь, этакого подставного актёра, телохранителя для обычного объекта. Настоящий объект сидит себе тихо, а этот прокси-хукси стоит перед ним и всех встречает. И он может, сука, на лету перехватывать любые попытки достучаться до оригинала: прочитать свойство, записать, удалить — да всё, что угодно! И сделать с этой попыткой что захочет: подменить ответ, записать в лог, или нахуй послать, если что не так.

Смотри, как это выглядит в коде, тут всё просто:

const target = { name: 'John' }; // Вот наш скромняга, оригинальный объект
const handler = { // А это — его личный охранник с инструкциями
  get(target, prop) {
    // Если свойство есть — отдаём. Нет — посылаем нахуй с вежливым "Not found"
    return prop in target ? target[prop] : 'Not found';
  }
};
const proxy = new Proxy(target, handler); // Объединяем их в одну банду

console.log(proxy.name); // 'John' — всё ок, пропустили к боссу
console.log(proxy.age);  // 'Not found' — а тут охранник сам ответил, даже не беспокоил!

И где, спрашивается, эта хуйня пригождается? Да везде!

  • Проверка данных. Захочет кто-то записать в объект какую-то дичь — охранник (прокси) может сказать: "Э, пошёл нахуй, это не число!".
  • Слежка. Можно всё логировать: кто, когда и к каким свойствам лез. Полная прослушка объекта, блядь.
  • Кэширование. Если свойство вычисляется долго, прокси может запомнить результат и в следующий раз отдать его мгновенно, не дергая оригинал.
  • Защита. Сделать объект как бы невидимым для удаления или изменения — настоящая крепость, ёпта!

Короче, эта штука (Proxy) умеет перехватывать овердохуищу операций: не только get и set, но и вызов функции, удаление, перечисление свойств — полный контроль, как в фильме про хакеров. Мощнейший инструмент, если знать, куда его приложить.