const parent = {
a: 1,
get value() {
console.log(this === child) // true
return this.a
},
}
const handler = {
get: function (obj, prop, receiver) {
// return obj[prop]
// console.log(obj, prop) // parent
return Reflect.get(obj, prop, receiver)
// receiver
// 如果obj对象中指定了getter,receiver则为getter调用时的this值。
},
set: function (obj, prop, value, receiver) {
console.log('set') // 全程无触发Set
return true
},
}
const proxyObj = new Proxy(parent, handler)
const child = Object.setPrototypeOf({ a: 2 }, proxyObj)
//parent的getter调用,this为child
child.value // 2
console.log('test')
//parent的getter调用,this为child
console.log(child.value)
// 输出
// true
// test
// true
// 2
Vue3中的Proxy用Reflect的原理
最新推荐文章于 2024-09-29 10:33:26 发布