主要区别在this指向不同,下面输出张三还是李四?:
const person={name:'张三',get FullName(){return this.name;},};let personProxy=new Proxy(person,{get(target,key){return Reflect.get(target,key)//或者return target[key]}});const p1={__proto__:personProxy,name:'李四'}console.log(p1.FullName)
答案:张三。
当我们读取p1.FullName时,它自身是没有该属性的,也没有指定该属性的getter,它会找到继承自personProxy中,此时会触发get读取target里面的key,此时的target目标对象为person,key为FullName,如果想指定调用者为p1,可以使用第三个参数receiver
const person={name:'张三',get FullName(){return this.name;},
};let personProxy=new Proxy(person,{get(target,key,receiver){return Reflect.get(target,key,receiver)}
});
const p1={__proto__:personProxy,name:'李四'}
console.log(p1.FullName)//李四
更多好玩好玩前端知识,可以搜索【坤坤前端笔记】小程序,让我们换个姿势学前端。