数据劫持: 就是通过 Object.defineProperty 去操作 数据的get和set
实现一个数据监听器Observer,能够对数据对象的所有属性进行监听
监听的就是这个data
订阅者模式:一对多,data的一个数据变化, 页面上用到这个数据的地方 都更新
var data ={name: "zs"}
observe(data)
function observe(data){
if(!data || typeof data !== Object){
return ;
}
Object.keys(data).forEach(funtion(key){
defineReactive(data,key,data[key])
})
}
function defineReactive(data,key,val){
observe(val) //监听子属性
Object.defineProperty(data,key,{
enumerable:true,//可枚举
configurable:false,//不能再define
get:function(){
return val;
},
set:function(newVal){
console.log('监听到值变化了',newVal)
val = newVal;
}
})
}