> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/01-languages/javascript/01-language/c-functions/c4-meta/04-proxy-decorator.md).

# 04. Proxy Decorator

Прокси могут быть прототипами объекта. Тогда, некоторые операции, начинающиеся в объекте могут перехватываться прокси-прототипом.

Иногда есть необходимость перехватывать все методы, но и сохранять возможность перенаправлять их выполнение в `target`. В этом случае нужно повесить обработчик на доступ ко всем свойствам объекта, а затем делегировать их выполнение на объекте. Это делается при помощи комбинаций вызова двух функций

* Перехватчик `get` вызывается при обращении к любому свойству объекта `xXX`.
* `Reflect.xXX`

```javascript
const handler = new Proxy({}, {
    get(target, trapName, receiver) {
        // Return the handler method named trapName
        return function (...args) {
            // Don’t log args[0]
            console.log(trapName.toUpperCase()+' '+args.slice(1));
            // Forward the operation
            return Reflect[trapName](...args);
        }
    }
});

> const target = {};
> const proxy = new Proxy(target, handler);
> proxy.foo = 123;
SET foo,123,[object Object]
> proxy.foo
GET foo,[object Object]
123
```
