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对象