每當開始一場技術面試的過程當中,面試官總會是有意去詢問想,會vue嗎?可見vue在國內的地位不容小覷,首當其問的就是能說說vue是如何實現數據雙向綁定嗎? css
爲了不尷尬的場景再發生,咱們一塊兒好好研究下vue的響應式原理吧!html
若是小夥伴早已熟知這兩個問題,能夠瀏覽下一朋友正在籌劃中的 面試彙總庫vue
閒事少管,走路陳展。開始正題。react
引用vue官網的一段話。git
當你把一個普通的 JavaScript 對象傳入 Vue 實例做爲 data 選項,Vue 將遍歷此對象全部的屬性,並使用 Object.defineProperty 把這些屬性所有轉爲 getter/setter。github
Object.defineProperty在本次項目中扮演着相當重要的角色。面試
因此暫時不太熟悉這個方法的小夥伴能夠點擊 MDNbash
經過Object.defineProperty來定義全部的屬性,這些屬性就能夠擁有get/set方法。app
用vue官網的一個🌰。當我在控制檯輸入 app.$data我就能夠訪問到app實例中的data對象。this
咱們能夠看到data對象下的屬性message,有屬於本身的get/set.
如今咱們vue實例的data屬性都有了set()/get()。但咱們在vue中常常還會遇到 好比
this.$data.message = {repoter:{person:'zhx'}}
複製代碼
既然咱們要達到響應式,那麼就算後期改變咱們也要爲它加上get()/set()
咱們只須要在set方法中再一次調用Observe()便可,以下代碼所示
在vue中咱們常常取值都是經過this.message取值而不是this.$data.message,因此這一步咱們要作$data的代理
複製代碼
本次主要分享了有
下一次主要分享 1.編譯模板處理 2.發佈訂閱模式
若是面試官再問起這題,我一定能成竹在胸。
但願本文可以對你有所幫助。祝你工做生活都愉快❤