Skip to content

关于 《响应式系统的依赖收集追踪原理》.js 中一些疑惑 #7

@zhanyuzhang

Description

@zhanyuzhang

该 JS 文件中有 defineReactive 函数定义如下:

function defineReactive (obj, key, val) {
  const dep = new Dep();
  
  Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter () {
          dep.addSub(Dep.target);
          return val;         
      },
      set: function reactiveSetter (newVal) {
          if (newVal === val) return;
          val = newVal;
          dep.notify();
      }
  });
}

不太明白为什么要把 dep.addSub(Dep.target); 放到 get 方法里面呢?这样就会一定要读取过属性才会添加到订阅队列中,感觉 不太好。改成以下会不会好一些呢?

function defineReactive (obj, key, val) {
  const dep = new Dep();
  dep.addSub(Dep.target);
  
  Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter () {
          return val;         
      },
      set: function reactiveSetter (newVal) {
          if (newVal === val) return;
          val = newVal;
          dep.notify();
      }
  });
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions