Vue3 源码学习 - Reflect.get() 相关笔记

67 阅读1分钟
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 就会一直触发 get
  • Reflect.get(target, key) 等价于 target[key]

Reflect.get(target, key, receiver),我们传入了 receiver 这个参数。在我们获取 aliasName 的时候,this.name 是指向 receiver 的,即指向了 proxy。所以 this.name 也会触发 get。