前言
接上回书说到,我们实现了几个小点之后,我们要开始实现Observer类了
Observer
- 功能
- 负责把data选项中的属性转换成响应式数据
- data中的某个属性也是对象,把该属性转换成响应式数据
- 数据变化发送通知
- 结构
walk
/**
* @method 遍历data中的属性
* @param {*} data
*/
walk(data) {
// 1. 判断data是否是对象
if (!data || typeof data !== 'object') {
return
}
// 2. 遍历data对象的所有属性
Object.keys(data).forEach(key => {
this.defineReactive(data, key, data[key])
})
}
defineReactive
/**
* @method 定义响应式数据 调用 defineProperty 为对象添加get/set方法
* @param {*} data
* @param {*} key
* @param {*} value
*/
defineReactive(data, key, value) {
const self = this
this.walk(value)
Object.defineProperty(data, key, {
enumerable: true,
configurable: true,
get() {
return value
},
set(newValue) {
if (newValue === value) {
return
}
val = newValue
self.walk(newValue)
}
})
}
到这里简单版就结束了