Vue原理

vue雙向綁定的核心是經過Object.defineProperty()在實現數據劫持。由於Object.defineProperty()是ES5中一個沒法shim的特性,這也就是爲何vue支持IE8以上的瀏覽器。
clipboard.png
首先咱們須要設置一個監聽器Observer,用來監聽全部屬性。若是屬性值發生了改變,就須要告訴訂閱者Watcher看是否須要更新。由於訂閱者是有不少個,因此,咱們須要有一個消息訂閱器Dep來專門收集這些訂閱者,而後在監聽者和訂閱者之間進行統一管理。接着,咱們還須要一個指令解析器,對每一個節點進行掃描和解析,將相關指令對應初始化成一個訂閱者Watcher,並替換模板數據或者綁定響應的函數,此時當Watcher接收到響應屬性的變化,就會執行對應的更新函數,從而更新視圖。vue

  • 實現一個數據監聽器Observer,可以對數據對象的全部屬性進行監聽,若有變更可拿到最新值並通知訂閱者
  • 實現一個指令解析器Compile,對每一個元素節點的指令進行掃描和解析,根據指令模板替換數據,以及綁定相應的更新函數
  • 實現一個Watcher,做爲鏈接Observer和Compile的橋樑,可以訂閱並收到每一個屬性變更的通知,執行指令綁定的相應回調函數,從而更新視圖