vue中雙資料繫結原理以及實現

2022-07-21 17:30:34 字數 1795 閱讀 3466

熟悉vue的小夥伴應該熟悉vue中的v-model的使用方法,他的作用就是來實心雙資料繫結的,那麼先在來說明一下雙資料繫結的原理

它的底層原理是由object.defineproperty實現的

作用:給乙個物件新增或者修改屬性,返回乙個物件

引數:引數一:目標物件

引數二:需要修改或新增的屬性

引數三:給當前屬性的一些特徵

接下來我們來簡單實現以下

var obj = 

object.defineproperty(obj,'name',)

console.log(obj)

這樣我們就實現了給物件新增name這個屬性值為val

這樣我們再次學他的其他一些簡單的應用

var obj = 

object.defineproperty(obj,'name',, //當屬性被獲取時觸發

set(){} //當屬性被修改時觸發

})

當使用set,get方法時候,不能使用value,writable這兩個屬性

原理:我們通過監聽乙個資料的變化,再將資料變化時的值設定另乙個資料上

現在我們依照原理來簡單實現以下

我們這樣就完成了乙個簡單的雙資料繫結

但是我們還沒有看見vue的影子,接下來我們寫乙個稍微複雜一點的雙資料繫結

var otxt = document.getelementbyid('txt')

var omsg = document.getelementbyid('msg')

function vue(options)

vue.prototype = }})

})}

}var vm = new vue(

})otxt.addeventlistener('input',function())

這樣看起來會比較像,但是還是感覺差了點什麼

所以我們再寫乙個最終版的vue雙資料繫結}}

}}}}

}}}}

function vue(options);

this.init(this.data);

this.eventtype(this.el);

}vue.prototype =

console.log(_this.viewmodel)

object.defineproperty(obj,key,,

set:function(newvalue))}}

})})

},eventtype:function(root)

})(i))

}if(childs[i].innertext.replace(/\\}/g,""))\}/g,"");

_this.viewmodel[dataattr]._directive.push(new watch(

childs[i].tagname,

"innertext",

childs[i],

_this,

dataattr))}

}}

}//更新資料的方法 標籤的名稱 當前元素 當前元素的屬性 vue的例項 data屬性

function watch(name,exp,el,vm,attr)

watch.prototype.update = function()

var vm = new vue(

})

vue實現資料雙向繫結原理

vue實現資料雙向繫結主要是採用資料劫持結合發布者 訂閱者的模式的方式來實現。通過object.defineproperty 的get和set來劫持每個屬性,在資料發生變化時通過發布者發訊息給訂閱者,觸發相應的監聽回掉。具體就是先把說有的資料做乙個資料劫持。第一先修改資料,在input框輸入值的時候...

原理 vue雙向資料繫結原理以及計算屬性

手寫乙個vue雙向資料繫結以及計算屬性 雙向資料繫結是以object.defineproperty obj,a 1 屬性為核心,整體看的時候比較懵。我在下面進行了顏色以及序號分組,如果原生js不是很好的話,要多看幾遍,下面 進行了大量的注釋,盡可能的方便理解。一 演示 二 演示 a的值 p b的值 ...

vue中的資料繫結原理

vue中的響應式資料繫結是通過資料劫持和觀察者模式來實現的。當前學習原始碼為vue2.0 原始碼關鍵目錄 src core instance init.js state.js observer dep.js watcher.js 當我們例項化乙個vue應用的時候,會伴隨著各種的初始化工作,相關的初始...