难兄与难弟
概念
- 把Proxy可以理解为一个原型,这个原型是用来包装对象的,对象自身没有额外增加别的影响,却可以通过代理来直接操作对象。
- Reflect 是一个内建对象,可简化 Proxy 的创建。
观点(纯属个人观点,可以忽略)
-
为何说是难兄和难弟呢?
- 因为吧,Proxy是一个包装器,它只能算是对象的傀儡,有名无实。而Reflect呢就是来帮它哥简化创建的。看到这,是不觉得代理够惨了,不,还有更惨的地方。对于一些采用了“内部插槽”的内建对象,Proxy直呼没有人权啊(可参考图书中Proxy的局限性)。
-
代理是名词,映射是动词
- 把对象当成手机屏幕,代理当成手机的钢化膜。之前没有钢化膜的时候我们直接操作屏幕,有了钢化膜之后呢,我们操作钢化膜,钢化膜将我们的操作行为映射到屏幕。
demo
/**
* 代理对象
* @param {object} obj 目标对象
* @param {string} property 属性
* @param {function} callback 回调函数
*/
export const listen = (obj, callback) => new Proxy(obj, {
get() {
//通过映射进行操作
return Reflect.get(...arguments);
},
set(target, prop, newVal, receiver) {
if (newVal !== target[prop]) {
const result = [prop, newVal, target[prop], target, receiver];
callback(...result)
};
return Reflect.set(...arguments)
},
})