在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  HTML/ Vue 中 Observer 的用處是什么?

Vue 中 Observer 的用處是什么?

在看Vue的源碼,產(chǎn)生一個疑問:

state.jsinitData() 函數(shù)中,使用的是 observe() 方法來為數(shù)據(jù)對象綁定一個Observer對象,Observer對象執(zhí)行 defineReactive() 方法為數(shù)據(jù)對象設(shè)置 setter 和 getter。
而在 initProps() 函數(shù)中,通過遍歷 props 選項直接對數(shù)據(jù)執(zhí)行了 defineReactive() 方法來設(shè)置 setter 和 getter。

那么,同樣是為數(shù)據(jù)設(shè)置 setter 和 getter,為什么 initData()initProps() 多一個 Observer 類,這個 Observer 類的功能到底是什么?

回答
編輯回答
憶當年

Observer 類 主要做的事情就是對傳入的數(shù)據(jù) 進行雙向綁定!

通過Object.defineProperty來做數(shù)據(jù)劫持.然后會實例化一個Dep類(利用了發(fā)布/訂閱者模式),從而對數(shù)據(jù)進行雙向綁定!!!

2018年5月16日 19:40
編輯回答
練命

簡單看了一下,拋個磚

站在component的角度,props是immutable的,而data是mutable的
所以相對于props,data需要對對象的子對象以及數(shù)組內(nèi)的元素都設(shè)置setter 和 getter
而props不用

所以O(shè)bserver的功能,應(yīng)該就是對數(shù)組元素的遍歷執(zhí)行defineReactive(),以及深度遍歷Object為每一個子對象都執(zhí)行defineReactive()
對應(yīng)的就是Observer.observeArrayObserver.walk這兩個方法

可能還有一些細節(jié)上的差別,但主要的應(yīng)該就這兩點了

2017年11月15日 04:25