class MyProxy{
constructor(target,desc,self=this){
var
old_get=('get' in desc)?desc.get:function(target,prop){return target[prop];},
old_has=('has' in desc)?desc.has:function(target,prop){ return (prop in target);};
desc.get=function(target,prop){
if(prop=='getOwnPrototypeOf'){
return function() {
return Object.getPrototypeOf(self);
/* //if "getOwnPrototypeOf" is defined in "target", then do not override it.
if('getOwnPrototypeOf' in target){ //if "target" is MyProxy object.
return target.getOwnPrototypeOf();
} else{
return Object.getPrototypeOf(self);
}
*/
}
} else if(prop=='getOwnProxyObjectOf') {
return function(){
return self;
}
}
return old_get(target,prop);
}
desc.has=function (target,prop){
if(prop=='getOwnPrototypeOf'|| prop=='getOwnProxyObjectOf'){
return true;
}
return old_has(target,prop);
}
return new Proxy(target,desc);
}
}
// Exemple
class AsdProxy{
constructor(target,desc,self=this){
self=this;
return new MyProxy(target,desc,self);
}
}
class AsdProxy2{
constructor(target,desc,self=this){
return new MyProxy(target,desc,self);
}
}
class AsdProxy3 {
constructor(target,desc,self=this){
return new AsdProxy2(target,desc,self);
}
}
ss=new MyProxy({},{});
console.log('getOwnPrototypeOf' in ss && MyProxy.prototype===ss.getOwnPrototypeOf());//true
console.log(ss.getOwnProxyObjectOf() instanceof MyProxy); //true
asd=new AsdProxy({},{});
asd2=new AsdProxy2({},{});
asd3 = new AsdProxy3({},{});
console.log(asd2.getOwnProxyObjectOf() instanceof MyProxy);// false
console.log(asd2.getOwnProxyObjectOf() instanceof AsdProxy);//false
console.log(asd2.getOwnProxyObjectOf() instanceof AsdProxy2); //true
console.log(asd3.getOwnProxyObjectOf() instanceof AsdProxy2);// false
console.log(asd3.getOwnProxyObjectOf() instanceof AsdProxy3); // true
Może proxy Proxy? Mam na myśli proxy funkcję Proxy przed jakimkolwiek skryptem z udziałem Proxy .. – user943702
Czy to nie jest celem serwerów proxy, że nie można ich odróżnić od "normalnego" obiektu? Dlaczego chcesz to przetestować? – Bergi
@Bergi cóż, z pewnością nie jest to główny cel serwerów proxy. Co do reszty, jestem nieco zaskoczony, że nie możesz wymyślić przypadek użycia dla tego testu. –