# 01. Proxy

**Прокси** - это инструмент метапрограммирования, позволяющий перехватывать и переопределять операции выполняемые над объектом. Прокси разрабатывались с целью дать возможность изменять семантику языковых конструкций при работе с объектами.

Рассмотрим пример:

* `proxy` - объект, чьи операции перехватываются
* `handler` - обработчик событий операций над объектом. Обрабатывается только операция `get`.

  \-

```javascript
const target = {};
const handler = {
    get(target, propKey, receiver) {
        console.log('get ' + propKey);
        return 123;
    }
};
const proxy = new Proxy(target, handler);

> proxy.foo
get foo
123
```

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

* Tracing property accesses (get, set)
* Warning about unknown properties (get, set)
* Negative Array indices (get)
* Data binding (set) - вызывать обработчик при изменении данных объекта.
* Замена обращений к объекту на вызов функции
