数据劫持: 就是通过 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; } }) }