const person = {
name: 'Bob',
get aliasName() {
return 'Aka' + this.name
}
}
const proxy = new Proxy(person, {
get(target, key, receiver) {
// 1. return target[key]
// 2. return receiver[key]
// 3. return Reflect.get(target, key)
// 4. return Reflect.get(target, key, receiver)
},
})
console.log(proxy.aliasName)
target[key]输出 AkaBob,因为,target -> person,会去调用 aliasName 方法 ( aliasName 里使用了 this.name 并不会触发 proxy 的 get)receiver[key]一直输出 Bob。因为 receiver -> proxy,获取 aliasName 就会一直触发 getReflect.get(target, key)等价于target[key]
Reflect.get(target, key, receiver),我们传入了 receiver 这个参数。在我们获取 aliasName 的时候,this.name 是指向 receiver 的,即指向了 proxy。所以 this.name 也会触发 get。