function createHandler () {return {get (target, key, receiver) {// Proxy 中的 get 的 receiver 是 当前创建的Proxy 对象,或者继承当前Proxy对象的子对象if (key === 'foo') {return '这是一个很神奇的属性'}return Reflect.get(target, key, receiver)},set (target, key, value, receiver) {return Reflect.set(target, key, value, receiver)},deleteProperty(target, key) {return Reflect.deleteProperty(target, key)}}}const proxy = new Proxy(obj, createHandler())
Reflect: reflect是借鉴jave.c#的反射的一个概念。
反射不允许在代码运行期间直接操作对象,这个时候就可以使用Relect进行反射
Object.getOwnProperty等Object方法其实就是reflect的一种引用
Reflect.set放回一个boolean类型的值
Proxy
receiver: 是proxy对象
