Vue雙向綁定的源碼樹結(jié)構(gòu)分析

本文的目標(biāo)

以更加清晰的結(jié)構(gòu)和邏輯讓我們更好的理解Vue雙向綁定的原理實(shí)現(xiàn):

1耳鸯、理解Vue的雙向綁定代碼實(shí)現(xiàn)邏輯;
2膀曾、理解data數(shù)據(jù)為何必須要以函數(shù)形式定義县爬;
3、理解為何可以直接以 this.xxx 訪問添谊,屬性财喳、方法、data斩狱、props;
4耳高、理解 vue.set(),vue.delete()實(shí)現(xiàn)原理;
5所踊、理解生命周期函數(shù)執(zhí)行的時(shí)機(jī)泌枪;
6、理解為何vue的監(jiān)聽會消耗大量的內(nèi)存秕岛;
7碌燕、以直觀 “樹” 的方式理解Vue雙向綁定源碼,或以樹的視角觀察領(lǐng)悟世間萬物继薛;

引言

茫茫宇宙修壕,浩瀚星辰,世間萬物大多我們都可以用一顆樹來表示他們之間的從屬關(guān)系遏考。
大到宇宙小到原子列舉身邊所見的一切事物慈鸠,都可以用一顆樹來與別人產(chǎn)生聯(lián)系,比如:
1诈皿、宇宙-河外星系-銀河系-太陽系等等林束,可以用一顆樹來表示;
2稽亏、我們學(xué)習(xí)的知識壶冒,數(shù)學(xué),物理截歉,生物胖腾,語言等都會分門別類,用一顆樹來表示他們的關(guān)系瘪松;
3咸作、國家的權(quán)利機(jī)構(gòu),公司的組織架構(gòu)宵睦,等等记罚,世界的一切似乎都可以用一顆樹來描述;
4壳嚎、計(jì)算機(jī)有一種特別的數(shù)據(jù)結(jié)構(gòu) “樹”桐智;

先來看看 一顆樹的樣子:


tree.jpg

抽象下變成程序員熟悉的樣子:


abstractTree.jpg
樹結(jié)構(gòu)數(shù)據(jù)有2種遍歷方法:
深度優(yōu)先遍歷 (DFS)

DFS 會沿特定路徑遍歷到葉子結(jié)點(diǎn)再回溯 (backtracking) 進(jìn)入臨近路徑繼續(xù)遍歷末早。
最簡單,我們最常用的實(shí)現(xiàn)方式就是说庭,函數(shù)遞歸調(diào)用遍歷樹結(jié)構(gòu)數(shù)據(jù)然磷。
其實(shí)現(xiàn)的本質(zhì)原理是,棧結(jié)構(gòu)數(shù)據(jù)刊驴,后進(jìn)先出姿搜。
我們使用一個(gè)數(shù)組也很容易模擬一個(gè)棧。


datastack.jpg
廣度優(yōu)先搜索 (BFS)

BFS :按照結(jié)點(diǎn)深度逐層遍歷樹結(jié)構(gòu)捆憎。
一層一層的遍歷樹的節(jié)點(diǎn)舅柜,其代碼實(shí)現(xiàn)攻礼,使用隊(duì)列數(shù)據(jù)結(jié)構(gòu)业踢,先進(jìn)先出礁扮。
1 -> 2、5 -> 3 太伊、4->6、7 用數(shù)組很容易實(shí)現(xiàn)隊(duì)列逛钻。

Vue雙向綁定的原理實(shí)現(xiàn)

經(jīng)過分析僚焦,我們發(fā)現(xiàn),Vue程序的執(zhí)行曙痘,就像一顆樹一樣,于是边坤,我們可以把程序里面的一個(gè)函數(shù)看成一個(gè)節(jié)點(diǎn),把他們構(gòu)建成一顆樹的結(jié)構(gòu)茧痒,讓我們能夠更加清晰的看到源碼的程序結(jié)構(gòu)肮韧,對代碼的結(jié)構(gòu),邏輯理解更加清晰旺订。
先看看源碼目錄結(jié)構(gòu):


vue.png

下面是把Vue源碼的核心代碼和函數(shù)看成一個(gè)節(jié)點(diǎn)描述出來的大體雙向綁定結(jié)構(gòu)圖:

mindmaster地址: Vue雙向綁定核心代碼函數(shù)關(guān)系
Vue雙向綁定核心代碼函數(shù)關(guān)系 .png
我們發(fā)現(xiàn)弄企,JS代碼的執(zhí)行区拳,就像一顆樹的深度遍歷,那是因?yàn)橛5鳎瑔尉€程的JS函數(shù)執(zhí)行環(huán)境是一個(gè)棧環(huán)境結(jié)構(gòu)的洽瞬,后進(jìn)先出。

源碼的復(fù)雜度很高伙窃,細(xì)節(jié)很多,先看看這個(gè) 從零實(shí)現(xiàn)一個(gè)VUE为障,深入了解vue實(shí)現(xiàn)原理 有助于我們理解雙向綁定原理。

由于理解有限放祟,難免錯(cuò)誤,還請多多指教鞋喇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眉撵,一起剝皮案震驚了整個(gè)濱河市侦香,隨后出現(xiàn)的幾起案子纽疟,更是在濱河造成了極大的恐慌,老刑警劉巖污朽,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蟆肆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)炎功,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來官紫,“玉大人,你說我怎么就攤上這事束世。” “怎么了床玻?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵毁涉,是天一觀的道長。 經(jīng)常有香客問我锈死,道長贫堰,這世上最難降的妖魔是什么穆壕? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任其屏,我火速辦了婚禮,結(jié)果婚禮上川背,老公的妹妹穿的比我還像新娘。我一直安慰自己熄云,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布缴允。 她就那樣靜靜地躺著珍德,像睡著了一般练般。 火紅的嫁衣襯著肌膚如雪菱阵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼政基。 笑死,一個(gè)胖子當(dāng)著我的面吹牛年柠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溯壶,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼甫男,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了又跛?” 一聲冷哼從身側(cè)響起若治,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤感混,失蹤者是張志新(化名)和其女友劉穎礼烈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庭呜,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摹迷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峡碉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吉执,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戳玫,到底是詐尸還是另有隱情,我是刑警寧澤咕宿,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布蜡秽,位于F島的核電站府阀,受9級特大地震影響芽突,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寞蚌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挟秤。 院中可真熱鬧,春花似錦煞聪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隧饼。三九已至,卻和暖如春燕雁,著一層夾襖步出監(jiān)牢的瞬間诞丽,已是汗流浹背拐格。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捏浊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓浊洞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親法希。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348