02. Create Proxy
Proxies are special objects that allow you customize some of these operations. A proxy is created with two parameters:
handler
: For each operation, there is a corresponding handler method that – if present – performs that operation. Such a method intercepts the operation (on its way to the target) and is called a trap (a term borrowed from the domain of operating systems).target
: If the handler doesn’t intercept an operation then it is performed on the target. That is, it acts as a fallback for the handler. In a way, the proxy wraps the target.
If the target is a function, two additional operations can be intercepted:
apply
: Making a function call, triggered viaproxy(···)
proxy.call(···)
proxy.apply(···)
construct
: Making a constructor call, triggered vianew proxy(···)
Операции, не соответствующие handler
автоматически перенаправляются в target
.
При помощи прокси нельзя перехватить вызов метода. Это нельзя сделать потому, что вызов метода - это одновременно две операции: (1) get
-получение метода, (2) apply
вызов функции. Решением является proxy-перехватчик на get
, который возвращает обработчик перехвата apply
:
function traceMethodCalls(obj) {
const handler = {
get(target, propKey, receiver) {
const origMethod = target[propKey];
return function(...args) {
const result = origMethod.apply(this, args);
console.log(
propKey + JSON.stringify(args) + " -> " + JSON.stringify(result)
);
return result;
};
}
};
return new Proxy(obj, handler);
}
Last updated
Was this helpful?