Skip to content

Instantly share code, notes, and snippets.

@XoseLluis
Created November 22, 2016 00:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save XoseLluis/24ca46a531df98653258703a20c8a198 to your computer and use it in GitHub Desktop.
Save XoseLluis/24ca46a531df98653258703a20c8a198 to your computer and use it in GitHub Desktop.
Determine if an ES6 object is a proxy
function extendProxyHandler(handler){
let originalGetTrap = handler.get;
handler.get = function(target, propKey, receiver){
switch (propKey){
case "_isProxy":
return true;
break;
case "_proxyTarget":
return target;
break;
default:
if (typeof handler.get === "function"){
return originalGetTrap.call(this, target, propKey, receiver);
}
else{
return Reflect.get(target, propKey);
}
break;
}
};
let originalSetTrap = handler.set;
handler.set = function(target, propKey, value, receiver){
switch (propKey){
case "_isProxy":
break;
case "_proxyTarget":
break;
default:
if (typeof handler.set === "function"){
return originalSetTrap.call(this, target, propKey, value, receiver);
}
else{
return Reflect.set(target, propKey, value);
}
break;
}
};
}
let proxyHandler = {
get: function(target, propKey, receiver){
//log the method calls
if (typeof target[propKey] === "function"){
console.log("intercepting call to method: " + propKey );
}
return Reflect.get(target, propKey);
}
};
class Person{
constructor(name){
this.name = name;
}
sayHiTo(someone){
return `Hi ${someone} I'm ${this.name}`;
}
}
let p1 = new Person("Francois");
let proxiedP1 = new Proxy(p1, proxyHandler);
console.log(proxiedP1.sayHiTo("Didier"));
console.log("-------------------");
console.log("After enhanding the proxy handler");
extendProxyHandler(proxyHandler);
let proxiedP1_2 = new Proxy(p1, proxyHandler);
console.log(proxiedP1_2.sayHiTo("Didier"));
console.log("isProxy: " + proxiedP1_2._isProxy);
let p2 = proxiedP1_2._proxyTarget;
console.log("p1===p2: " + (p1===p2));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment