tips:只做了一层简单的监视,data里面含有多层嵌套就失效了。
let data = {
name: 'syukinmei',
address: 'zhejiang'
}
function Observer(obj) {
// 汇总对象中所有的属性形成一个数组
const keys = Object.keys(obj)
keys.forEach(k => {
Object.defineProperty(this, k, {
get() {
console.log(this, obj, '的getter调用了');
return obj[k];
},
set(val) {
obj[k] = val;
console.log(obj, `${k}被修改了,我要去解析模板,生成虚拟DOM了`);
}
})
})
}
// 创建一个监视的实例对象,用于监视data中属性的变化
const obs = new Observer(data);
console.log('obs', obs);
// vm实例对象,模拟new了一个Vue
const vm = {};
vm._data = data = obs;