欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
您的位置:DIVCSS5首页 > HTML >
vue2.0 使用了 Object.defineProterty 将data中的属性遍历并转化为getter 和 setter, 并且在getter中将使用数据的上下文进行一次收集,我们称之为依赖收集。
 
而在setter中就会触发依赖更新的操作,让在模板中可能会有多处随该依赖变化,所以我们将所有地方都收集起来,等待更新的时候进行一次批量操作。
 
下面是demo演示
 
(function () {
  let x;
  let y;
  let f = n => n * 100 + 200;
  let active;
 
  let onXChanged = function (cb) {
    active = cb;
    active();
    active = null;
  }
 
  // 收集更多依赖
  class Dep {
    // 依赖收集,将响应依赖添加到deps中
    constructor() {
      this.deps = new Set();
    }
 
    depend() {
      if (active) {
        this.deps.add(active)
      }
    }
    // 对当前deps中依赖一次执行
    notify() {
      this.deps.forEach(dep => dep())
    }
  }
 
  let ref = initValue => {
    let value = initValue;
    let dep = new Dep();
 
    return Object.defineProperty({}, "value", {
      get() {
        dep.depend();
        return value;
      },
      set(newValue) {
        value = newValue;
        dep.notify()
      }
    })
  }
 
  x = ref(1);
 
  onXChanged(() => {
    y = f(x.value);
    console.log(y);
  });
 
  x.value = 2;
  x.value = 3;
})()

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64570.shtml

如对文章有任何疑问请提交到DIV CSS论坛,或有任何网页制作CSS问题立即到CSS论坛发贴求解 或 直接DIVCSS5网页顶部搜索遇到DIVCSS疑问。
CSS教程文章修订日期:2018-08-14 17:37 原创:DIVCSS5
本文www.divcss5.com DIVCSS5版权所有。