面試題:你能寫一個 Vue 的雙向資料繫結嗎

發表於2018-04-19

在目前的前端面試中,vue的雙向資料繫結已經成為了一個非常容易考到的點,即使不能當場寫出來,至少也要能說出原理。本篇文章中我將會仿照vue寫一個雙向資料繫結的例項,名字就叫myVue吧。結合註釋,希望能讓大家有所收穫。

1、原理

Vue的雙向資料繫結的原理相信大家也都十分了解了,主要是通過 Object物件的defineProperty屬性,重寫data的set和get函式來實現的,這裡對原理不做過多描述,主要還是來實現一個例項。為了使程式碼更加的清晰,這裡只會實現最基本的內容,主要實現v-model,v-bind 和v-click三個命令,其他命令也可以自行補充。

新增網上的一張圖4024157692-5acc18cfb55d8

2、實現

頁面結構很簡單,如下

包含:

我們最後會通過類似於vue的方式來使用我們的雙向資料繫結,結合我們的資料結構新增註釋

首先我們需要定義一個myVue建構函式:

為了初始化這個建構函式,給它新增一 個_init屬性

接下來實現_obverse函式,對data進行處理,重寫data的set和get函式

並改造_init函式

接下來我們寫一個指令類Watcher,用來繫結更新函式,實現對DOM元素的更新

更新_init函式以及_obverse函式

那麼如何將view與model進行繫結呢?接下來我們定義一個_compile函式,用來解析我們的指令(v-bind,v-model,v-clickde)等,並在這個過程中對view與model進行繫結。

至此,我們已經實現了一個簡單vue的雙向繫結功能,包括v-bind, v-model, v-click三個指令。效果如下圖007

附上全部程式碼,不到150行

如果喜歡請關注我的Github,給個Star吧,我會定期分享一些JS中的知識,^_^

相關文章