前端每日一題(10.20題目+10.19答案)

哈嘍,大家好
我是法醫(yī)
快來(lái)和法醫(yī)一起看看
今天的前端每日一題吧
10月20日~面試題:

10月19日~參考答案:
v-model 雙向綁定的原理是什么?
v-model 本質(zhì)就是 :value + input 方法的語(yǔ)法糖??梢酝ㄟ^(guò) model 屬性的 prop 和 event 屬性來(lái)進(jìn)行自定義。原生的 v-model,會(huì)根據(jù)標(biāo)簽的不同生成不同的事件和屬性。
例如:
text 和 textarea 元素使用 value 屬性和 input 事件 checkbox 和 radio 使用 checked 屬性和 change 事件 select 字段將 value 作為 prop 并將 change 作為事件 以輸入框?yàn)槔?,?dāng)用戶在輸入框輸入內(nèi)容時(shí),會(huì)觸發(fā) input 事件,從而更新 value。而 value 的改變同樣會(huì)更新視圖,這就是 vue 中的雙向綁定。雙向綁定的原理,其實(shí)現(xiàn)思路如下:
首先要對(duì)數(shù)據(jù)進(jìn)行劫持監(jiān)聽,所以我們需要設(shè)置一個(gè)監(jiān)聽器 Observer,用來(lái)監(jiān)聽所有屬性。如果屬性發(fā)上變化了,就需要告訴訂閱者 Watcher 看是否需要更新。
因?yàn)橛嗛喺呤怯泻芏鄠€(gè),所以我們需要有一個(gè)消息訂閱器 Dep 來(lái)專門收集這些訂閱者,然后在監(jiān)聽器 Observer 和訂閱者 Watcher 之間進(jìn)行統(tǒng)一管理的。
接著,我們還需要有一個(gè)指令解析器 Compile,對(duì)每個(gè)節(jié)點(diǎn)元素進(jìn)行掃描和解析,將相關(guān)指令對(duì)應(yīng)初始化成一個(gè)訂閱者 Watcher,并替換模板數(shù)據(jù)或者綁定相應(yīng)的函數(shù),此時(shí)當(dāng)訂閱者 Watcher 接收到相應(yīng)屬性的變化,就會(huì)執(zhí)行對(duì)應(yīng)的更新函數(shù),從而更新視圖。
因此接下去我們執(zhí)行以下 3 個(gè)步驟,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定:
實(shí)現(xiàn)一個(gè)監(jiān)聽器 Observer,用來(lái)劫持并監(jiān)聽所有屬性,如果有變動(dòng)的,就通知訂閱者。
實(shí)現(xiàn)一個(gè)訂閱者 Watcher,可以收到屬性的變化通知并執(zhí)行相應(yīng)的函數(shù),從而更新視圖。
實(shí)現(xiàn)一個(gè)解析器 Compile,可以掃描和解析每個(gè)節(jié)點(diǎn)的相關(guān)指令,并根據(jù)初始化模板數(shù)據(jù)以及初始化相應(yīng)的訂閱器。
流程圖如下:
每天都會(huì)有一道面試題,大家的積極參與和討論,是我繼續(xù)下去的動(dòng)力,希望大家踴躍互動(dòng),共同進(jìn)步!保持學(xué)習(xí),每天進(jìn)步一點(diǎn)點(diǎn)!
大家可以將自己的想法在評(píng)論區(qū)留言,答案我會(huì)在明天每日一題中公布!
RECOMMEND

