1。接收者和代理中的这个?让obj=newProxy({},{get:function(target,propKey,receiver){returnReflect.get(target,propKey,receiver);},set:function(target,propKey,value,receiver){returnReflect.set(target,propKey,value,receiver);}});可以看到get和set拦截中的参数receiver,具体是什么?我们可以理解为最初调用的对象,例如:get(target,key,receiver){console.log(receiver)returntarget[key]}})letpig={_name:'pig',__proto__:animalProxy}//console.log(receiver)是对象animalProxy//console.log(this._name)foranimalanimalProxy.getName()//console.log(receiver)forobjectpig//console.log(this._name)forpigpig.getName()在这个例子中我们打印After查看this._name和receiver,可以发现其实和this在function上的机制是一致的,谁调用谁就指向谁。Tips:代理运行时不要在代理中打印receiver。访问receiver时,会经过get拦截器,导致死循环。所谓“internalslots”,类似于对象的私有属性,不允许外部访问,所以当代理不处理它们时,直接代理就会出错。letmap=newMap()letmapProxy=newProxy(map,{get(target,prop){returntarget[prop]},set(target,prop,val){target[prop]=val返回true}})//UncaughtTypeError:MethodMap.prototype.setcalledonincompatiblereceiver#