- 在Set,Map 中除了设置属性的方法不一其他的都是一样的,在代理Set属性中的size时,需要使 return Reflect.get(target,key,target);
- 如上代码,其中需要把target也就是代理对象用为this传入;
- 在做删除操作时可以通过 bind 方法绑定target 目标对象使用对够访问到Set 中的delete方法之后
- 再在 get中触发依赖收集就可以了需要注意的时,这里的size是动态的也就是当用户添加数据之后就会触 发size,
- 所以只需要在获取size属性时触发任务收集就可以了,在触发时只需要在get中返回自定义的数据方法,然后代理掉原有的方法加上逻辑再通过原型方法调用原对象的方法就能实现代理,
- 需要注意的时只有在删除与添加才需要触发副作用函数,在代理set时需要注意每次把目标数据放到原始数据上避够原始数据污染,也可以通过 代理 Symbol.iterator 实现 in 操作的拦截
,