這篇文章主要講解了Vue是如何實(shí)現(xiàn)的,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
用了Vue
也有兩年時(shí)間了,一直以來都是只知其然,不知其所以然,為了能更好的使用Vue
不被Vue
所奴役,學(xué)習(xí)一下Vue
底層的基本原理。
Vue
官網(wǎng)有一段這樣的介紹:當(dāng)你把一個(gè)普通的JavaScript
對象傳給Vue
實(shí)例的data
選項(xiàng),Vue
將遍歷此對象所有的屬性,并使用Object.defineProperty
把這些屬性全部轉(zhuǎn)為getter/setter
。Object.defineProperty
是ES5
中一個(gè)無法shim
的特性,這也就是為什么Vue
不支持 IE8 以及更低版本瀏覽器。
通過這一段的介紹不難可以得出,Vue是通過Object.defineProperty
對實(shí)例中的data
數(shù)據(jù)做了挾持并且使用Object.defineProperty
的getter/setter
并對其進(jìn)行處理之后完成了數(shù)據(jù)的與視圖的同步。
這張圖應(yīng)該不會很陌生,熟悉Vue
的同學(xué)如果仔細(xì)閱讀過Vue
文檔的話應(yīng)該都看到過。猜想一下Vue
使用Object.defineProperty
做為ViewModel
,對數(shù)據(jù)進(jìn)行挾持之后如果View
和Model
發(fā)生變化的話,就會通知其相對應(yīng)引用的地方進(jìn)行更新處理,完成視圖的與數(shù)據(jù)的雙向綁定。
下面舉個(gè)例子:
html: