主要區別在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)//李四
更多好玩好玩前端知識,可以搜索【坤坤前端筆記】小程序,讓我們換個姿勢學前端。