Proxy

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

Reflect

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect

Proxy和Reflect都是反射对象,它们被设计并且互相补充,反射对象是一个可以在运行时用来操作对象的变量、属性和方法的对象

const wumao = {
    age: '16',
    get value() {
        return this.age
    },
}

const original = {
    age: '20',
}

const handler = {
    get(target, key, receiver) {
        return target[key]
        // return Reflect.get(target, key, receiver)  // 展开和注释这一段
    },
}

const proxy = new Proxy(wumao, handler)

Object.setPrototypeOf(original, proxy) // 设置原型

console.log(original.value) // 如果不用receiver 指向的是16 ,否则是原对象20

Edit Proxy with Reflect

总结

其中的receiver指向的是原对象,Reflect.get的第三个参数是可以取值的时候指定内部的this指向,如上所示,如果不用receiver可能会导致原型的属性屏蔽了根对象的属性这种事情发生

Last modification:July 6, 2022
If you think my article is useful to you, please feel free to appreciate