在使用vue時,需要修改設計屬性值的時候,頁面的資料直接更新。
使用js中 object.defineproperty()這個方法實現
//上述方法需要的引數
object.
defineproperty
(物件,
'設定什麼屬性名'
,)
將物件轉換為響應式
var o =
function
definereactive
(target,key,value,enumerable)
屬性`)
return value;},
set(newval)
屬性`)
value = newval
}})}
//將物件轉換為響應式的
let keys = object.
keys
(o)for
(let i =
0;i)
開啟瀏覽器在控制台中輸入 o.age = 40
age的值就變成40啦
監聽物件的方法是get和set,但是對於陣列,data.list.push(1) 進行push操作的時候並不會觸發get() set()方法,所以我們要重寫陣列的方法,將陣列改為響應式
// 首先定義一組陣列 使用陣列時的一些方法
letarray_method=[
'push'
,'pop'
,'shift'
,'unshift'
,'reverse'
,'sort'
,'splice'
]let array_method = object.
create
(array.prototype)
;array_method
.foreach
(method =>
//呼叫原來的方法
let res = array.prototype[method].(
this
,arguments)
;return res;}}
)function
reactify
(o)}
else}}
function
definereactive
(target,key,value,enumerable)
object.
defineproperty
(target,key,
屬性`)
return value
},set(newval)
屬性`)
value = newval
}})}
let o =,,
],obj:};
reactify
(o)
這一波操作之後對陣列進行新增或者修改最後陣列裡的值都是響應式 Vue 響應式解析
lang en charset utf 8 name viewport content width device width,intial scale 1 vue 響應式解析title head div getelementbyid 對單個物件使用響應式繫結 function definereact...
vue響應式原理解析
vue響應式原理解析 首先定義了四個核心的js檔案 1.observer.js 觀察者函式,用來設定data的get和set函式,並且把watcher存放在dep中 2.watcher.js 監聽者函式,用來設定dep.target開啟依賴收集的條件,和觸發檢視的更新函式 3.compile.js ...
Vue響應式原理深入解析
vue最明顯的特性之一便是響應式系統,其資料模型即是普通的 j ascript 物件。而當你讀取或寫入它們時,檢視便會進行響應操作。響應式data div id exp div const vm new vue vm.message this is b 響應式 vm.message this is ...