主要区别在this指向不同,下面输出张三还是李四?:
javascript
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
javascript
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)//李四
更多好玩好玩前端知识,可以搜索【坤坤前端笔记】小程序,让我们换个姿势学前端。