Proxy
如上图所示, 代理 有些类似于生活中的打官司时的律师, 律师作为中间人的角色, 有什么事情律师可以帮助完成, 不需要自己操作,律师就是起到一个代理的作用。
proxy 也是如此, 通过代理和外界进行信息的获取和传递
es6 推出 反射的一部分原因是 实现代理, 在某些情况下, 读取或者是设置 属性的值的时候通过代理来实现,所以就需要代理具有修改和读取的底层实现的能力, 所以代理提供了修改底层实现的方式 ,在修改底层实现时应该使用 API 的形式进行操作, 不能使用具有魔法的特殊符号的形式进行操作, 所以为了实现修改底层实现的方式,所以推出了 反射。
代理的使用很简单, new 一下就可以了:
// 代理一个目标对象
// target: 目标对象
// handler: 是一个普通对象, 其中可以重写底层实现 ==> 反射中的都可以
// 返回一个代理对象
new Proxy(target, handler)
示列:
const obj = {
a: 1,
b: 2
}
const proxy = new Proxy(obj, {
// 修改
// target 目标对象
// propertyKey 要修改的键
// value 要修改的值
set(target, propertyKey, value) {
// 赋值操作
// target[propertyKey] = value
// 通过反射 实现底层赋值操作 简单易懂
Reflect.set(target, propertyKey, value);
},
get(target, propertyKey) {
// 通过底层实现 改写 Reflect 里面的所有内容 如下所示:
// 返回 存在的 值, 不存在返回 -1
if (Reflect.has(target, propertyKey)) {
return Reflect.get(target, propertyKey);
} else {
return -1;
}
},
......
})
proxy.a = 1;
console.log(proxy.a);
})
proxy.a = 1;
console.log(proxy.a);