我決定每周都寫一點技術(shù)的博客,但是一開始真的不知道要寫什么。或許也是自己的水平?jīng)]有到能想到一個什么很有意思的話題去寫吧。
那么我初期的博客就圍繞著別人的博客,然后寫上自己的發(fā)散和筆記吧。
原文-面試題:你能寫一個Vue的雙向數(shù)據(jù)綁定嗎?
詳細(xì)版
文中說不對Vue中的雙向綁定的原理做過多解釋了,但是我好像根本就不怎么了解也。所以,第一部分還是自己總結(jié)一下雙向綁定的原理吧。
雙向綁定實現(xiàn)的原理
剛看了一遍別人的博客,腦袋有點暈。媽的。再理理。
實現(xiàn)的最基本的思路是做到數(shù)據(jù)的監(jiān)聽。數(shù)據(jù)的劫持,在MVVM框架中,做到data層和view層的數(shù)據(jù)劫持。對于view層數(shù)改動,是很容易監(jiān)聽的。畢竟JS中的監(jiān)聽器就是專門做這個的。重點在于數(shù)據(jù)層的更改怎么和view層的更新的。
這個地方用到的就是Object.definePropert()。這個方法接受三個參數(shù),第一個是目標(biāo)對象,第二個是對象的屬性名,第三個是針對該屬性的描述。
var Book = {}
var name = ''
Object.defineProperty(Book,'name',{
set:function(value){name = value; console.log('you named a book '+name)},
get:function(){return '\<'+name+'\>'}
})
Book.name = 'yoyi'//you named a book yoyi
Book.name //"<yoyi>"
在描述里面就可以對set和get進(jìn)行監(jiān)聽,雙向綁定的最基本的思路就是這樣實現(xiàn)的。接下來,怎么做的,繼續(xù)看吧。