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