Vue数据监测原理
- 创建一个监听对象,监听被监听对象的数据变化。
- 为被监听对象每个属性(这里只监听一级属性,Vue会监听所以属性)生成
get()、set()方法,get() 返回被监听对象对应属性,set() 设置被监听对象对应属性。
- 创建 vm,并将监听对象赋值给vm._data。
let data = {
id: '001',
name: 'allen',
}
const obs = new Observer(data)
const vm = {}
vm._data = data = obs
function Observer(obj) {
const keys = Object.keys(obj)
keys.forEach((key) => {
Object.defineProperty(this, key, {
get() {
console.log(`${key}属性被读取了。`)
return obj[key]
},
set(val) {
console.log(`${key}属性被修改了 ${obj[key]} =>`, val)
obj[key] = val
},
})
})
}
vm._data.name = 'liangle'