色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue實(shí)現(xiàn)數(shù)據(jù)劫持

數(shù)據(jù)劫持是Vue實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的核心方法,通過(guò)數(shù)據(jù)劫持,可以讓Vue能夠自動(dòng)更新視圖,從而實(shí)現(xiàn)數(shù)據(jù)和視圖的雙向綁定。Vue的數(shù)據(jù)劫持是通過(guò)Object.defineProperty()方法來(lái)實(shí)現(xiàn)的。每個(gè)對(duì)象屬性都會(huì)被該方法轉(zhuǎn)換成getter和setter函數(shù),當(dāng)屬性的值發(fā)生變化時(shí),setter函數(shù)會(huì)被觸發(fā),從而通知Vue去更新視圖。

let data = {name: 'vue'}
let temp = data.name
Object.defineProperty(data, 'name', {
get: function () {
console.log('get value', temp)
return temp
},
set: function (newVal) {
console.log('set value', newVal)
temp = newVal
}
})
data.name = 'webpack' // set value webpack
let value = data.name // get value webpack

以上代碼中,通過(guò)Object.defineProperty()方法來(lái)給data對(duì)象的name屬性添加了getter和setter函數(shù)。getter函數(shù)在獲取屬性值的時(shí)候會(huì)被執(zhí)行,setter函數(shù)在設(shè)置屬性值的時(shí)候會(huì)被執(zhí)行,并且會(huì)將新的屬性值賦值給temp變量。因此,當(dāng)data.name的值發(fā)生變化時(shí),會(huì)輸出“set value webpack”日志,當(dāng)訪問(wèn)data.name的值時(shí),會(huì)輸出“get value webpack”日志。

在Vue中,通過(guò)以下代碼來(lái)實(shí)現(xiàn)數(shù)據(jù)的劫持:

function observe(data){
if (!data || typeof data !== 'object') {
return
}
Object.keys(data).forEach(function (key) {
defineReactive(data, key, data[key])
})
}
function defineReactive(data, key, val) {
observe(val) // 遞歸遍歷所有子屬性
Object.defineProperty(data, key, {
enumerable: true, // 可以被枚舉
configurable: false, // 不能被刪除
get: function () {
console.log('get value', val)
return val
},
set: function (newVal) {
console.log('set value', newVal)
val = newVal
}
})
}
let data = {name: 'vue'}
observe(data)
data.name = 'webpack' // set value webpack
let value = data.name // get value webpack

以上代碼中,通過(guò)observe()函數(shù)來(lái)遍歷data對(duì)象的所有屬性,并通過(guò)defineReactive()函數(shù)為每個(gè)屬性添加getter和setter函數(shù)。

當(dāng)數(shù)據(jù)發(fā)生變化時(shí),setter函數(shù)會(huì)被觸發(fā),從而通知Vue去更新視圖。Vue將自動(dòng)調(diào)用組件的render()函數(shù),重新渲染組件的模板,從而更新視圖。

當(dāng)數(shù)據(jù)發(fā)生變化時(shí),Vue也會(huì)觸發(fā)一個(gè)叫做“依賴收集”的過(guò)程。依賴收集是Vue實(shí)現(xiàn)數(shù)據(jù)劫持的重要機(jī)制之一。在依賴收集過(guò)程中,Vue會(huì)將每個(gè)組件中用到的數(shù)據(jù)都添加到一個(gè)觀察隊(duì)列中,這個(gè)觀察隊(duì)列就是Vue的“響應(yīng)式系統(tǒng)”。

在Vue的響應(yīng)式系統(tǒng)中,每個(gè)數(shù)據(jù)都會(huì)被封裝成一個(gè)Observer對(duì)象,Observer對(duì)象中包含了與數(shù)據(jù)相關(guān)的所有觀察者,也就是Watcher對(duì)象。當(dāng)數(shù)據(jù)發(fā)生變化時(shí),Observer對(duì)象會(huì)通知所有的Watcher對(duì)象,并讓它們執(zhí)行更新操作。

由于Vue的數(shù)據(jù)劫持機(jī)制,您在編寫(xiě)Vue應(yīng)用時(shí),只需要關(guān)注業(yè)務(wù)邏輯,不必?fù)?dān)心手動(dòng)更新DOM元素。Vue會(huì)自動(dòng)檢測(cè)到數(shù)據(jù)變化,并根據(jù)需要更新DOM。這種方式極大地簡(jiǎn)化了您的代碼,使之更易于維護(hù)和升級(jí)。