DMQ/mvvm

关于dep.target=null的问题

rmd1710714107 opened this issue · 2 comments

Watcher.js文件
get: function() {
        Dep.target = this;
        var value = this.getter.call(this.vm, this.vm);
        Dep.target = null;
        return value;
},

这里的Dep.target为什么要再次重置为null?

避免重复添加watcher

get: function() {
         if (Dep.target) {
               dep.depend();
         }
         return val;
  },

只有当watcher存在时,触发getter才会收集依赖。

var value = this.getter.call(this.vm, this.vm); 
// 这段代码是让dep添加这个watcher

// compile.js  bind方法
updaterFn && updaterFn(node, this._getVMVal(vm, exp)); 
// 这段代码更新了节点的值,也会触发getter,如果Dep.target存在,会添加更多的watcher

避免重复添加watcher

get: function() {
         if (Dep.target) {
               dep.depend();
         }
         return val;
  },

只有当watcher存在时,触发getter才会收集依赖。

var value = this.getter.call(this.vm, this.vm); 
// 这段代码是让dep添加这个watcher

// compile.js  bind方法
updaterFn && updaterFn(node, this._getVMVal(vm, exp)); 
// 这段代码更新了节点的值,也会触发getter,如果Dep.target存在,会添加更多的watcher

明白了,感谢