UNPKG

hc-web-log-mon

Version:

基于 JS 跨平台插件,为前端项目提供【 行为、性能、异常、请求、资源、路由、曝光、录屏 】监控手段

22 lines (20 loc) 1.15 kB
import { Watcher } from './watcher' export class Dep { // set结构可以自动去重,因为不可避免有些依赖会被重复添加 // 例如有两个计算属性是依赖于dataA,第一遍计算出那两个计算属性时,dataA的dep是收集了他俩的watcher // 但是当其中一个计算属性重新计算时(比如另外一个依赖项改动了会影响此计算属性重新计算),会再次调取dataA // 的get拦截,也就是会再次触发 dep.addSub(),如果不加重复过滤这样的场景会一直递增下去,然后当dataA发生 // 更改时遍历其subs,届时有太多不需要遍历的watcher,很大概率卡死 subs = new Set<Watcher>() static target: Watcher | undefined // 全局唯一收集容器 addSub() { if (Dep.target) this.subs.add(Dep.target) } notify(...params: any[]) { // 在某个属性发生变化时会执行其 dep.notify(),用来通知依赖这个属性的所有 watcher this.subs.forEach(function (watcher: any) { watcher.proxy.dirty = true // 标明数据脏了,当再次使用到这个值会重新计算 watcher.update(...params) }) } }