響應式原理 物件

2022-05-22 23:57:16 字數 1802 閱讀 2133

說起vue的響應式原理,大家也許只知道它的底層是對js的原生方法defineproperty的封裝,而具體的實現卻是一頭霧水。下面我們就一**竟。

主要目的:就是訪問攔截;在get中收集依賴,在set中觸發依賴;

/**

* 訪問描述符

*/function definereactive(data, key, val)

let dep = new dep()

object.defineproperty(data, key, ,

set: function (newval)

val = newval

// 通知觸發收集的依賴項

dep.notify()}})

}

主要目的:用於處理依賴。

class dep 

// 新增依賴;

addsub(sub)

// 刪除依賴;

removesub(sub)

// 收集依賴

depend()

} // 通知

notify()

}}function remove(arr, item)

}}

作用:將乙個資料內的所有的屬性都轉換成getter/setter的形式。然後去追蹤他們的變化;

class observer 

}// 此方法只在資料型別為物件時,呼叫;

walk(obj)

}}

乙個 watcher 中介的角色,收集的依賴就是它。

class watcher 

get()

update()

}// 用於根據路徑來讀取屬性的值;

const bailre = /[^\w.$]/

function parsepath(path)

const segments = path.split('.')

return function (obj)

return obj

}}

實現:vm.$watch()

// 定義乙個物件;

var data =

} // 觀測所有的屬性的變化

new observer(data)

function vm() {}

vm.prototype.$watch = function (obj, path, cb)

var vm = new vm()

vm.$watch(data, 'skill.dance', (newval, oldval) => )

vue通過對js的原生方法的封裝;來達到對資料的訪問和賦值的攔截,然後做執行自己的邏輯**;

要想達到對資料的響應,就要對資料進行處理,就是把用到這個資料的地方收集起來,然後當這個值發生變化時,通過便會通過觸發get函式,來通知用到這個資料的地方,則其修改;

vue響應式布局 Vue 響應式原理

vue2 的資料偵測 在 src observer 目錄裡面,元件例項在初始化時,會呼叫 observe 函式處理 data function initdata vm observe 改寫了所有物件屬性的 getter setter 和陣列原型上的 7 個會改寫陣列方法,從而讓 data 變成可響應...

vue響應式原理

響應式系統是vue框架核心的部分,資料物件僅僅是普通的 js物件。當我們改變資料時,檢視也會被改變,本文就來 一下vue 的響應式原理。vue響應式的核心是使用了es5 新增的api object.defineproperty 因此vue不支援ie8 object.defineproperty的作用...

vue響應式原理

要了解響應式原理首先應該知道什麼是響應式 更改 vue的響應式原理是什麼 vue資料的雙向繫結是通過資料劫持結合發布訂閱模式,偵測到資料變化,然後通過object.defineproperty 物件對每個屬性的getter和setter進行劫持。當讀取 data 中的資料時自動呼叫 get 方法,當...