不知以下代码是否能说明在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)