ES6的proxy

57 阅读1分钟

不知以下代码是否能说明在proxy中得使用Refect.get方法,以保证this的上下文指向正确。

let obj = {
  get foo () {
    console.log('this:', this)

    return this.bar;
  }
}

const proxy = new Proxy(obj, {
  get(target, key, receiver) {
    if (key === 'bar') {
      return 'bar-value'
    }

    return Reflect.get(target, key, receiver)
  },

  set(target, key, value, receiver) {
    console.log('设置值:', value)
    return Reflect.set(target, key, value, receiver)
  }
})

// undefined
// this指向obj
console.log('直接获取obj.bar:', obj.bar) 
// undefined
// this指向obj
console.log('直接获取obj.foo:', obj.foo)

// bar-value,获取过程为:执行proxy的get方法,执行Reflect.get(target, key='foo', 
// receiver)->执行obj.foo(this指向proxy)->执行proxy.get,执行Reflect.get(target, key='bar', receiver)
// this指向代理对象proxy
console.log('获取代理对象proxy.foo:', proxy.foo)