1.初始化 data 和 computed戏售,分別代理其 set 和 get 方法她肯,對 data 中的所有屬性生成唯一的 dep 實例
2.對 computed 中的 屬性生成唯一的 watcher审磁,并保存在 vm._computedWatchers 中
3.訪問計算屬性時拧额,設置 Dep.target 指向 計算屬性的 watcher,調(diào)用該屬性具體方法
4.方法中訪問 data 的屬性,即會調(diào)用 data 屬性的 get 方法稚疹,將 data 屬性的 dep 加入到 計算屬性的 watcher , 同時該 dep 中的 subs 添加這個 watcher
5.設置 data 的這個屬性時锈死,調(diào)用該屬性代理的 set 方法贫堰,觸發(fā) dep 的 notify 方法
6.因為時 computed 屬性,只是將 watcher 中的 dirty 設置為 true
7.最后待牵,訪問計算屬性的 get 方法時其屏,得知該屬性的 watcher.dirty 為 true,則調(diào)用 watcher.evaluate() 方法獲取新的值
綜合以上:也可以解釋了為什么有些時候當computed沒有被訪問(或者沒有被模板依賴)缨该,當修改了this.data值后偎行,通過vue-tools發(fā)現(xiàn)其computed中的值沒有變化的原因,因為沒有觸發(fā)到其get方法。