VUE数据劫持代理分析
//模拟vue组件中的data
let data = {
userName:'zhangsan',
age:30
}
//模拟组件实例
let _this = {
}
//利用Object.defineProperty()
Object.keys(data).map(item=>{
Object.defineProperty(_this,item,{
//get: 用来获取扩展属性值,当获取改属性值的时候调用get方法
get(){
return data[item]
},
//监听扩展属性,,只要修改扩展属性就会调用set方法(千万不要在set方法中设置扩展属性的值,否则会出现死循环)
set(newValue){
data[item] = newValue,
//this.userName = 'lisi', //错误,因为会触发set方法,然后又会在函数里进行赋值,造成无限循环
}
})
})
_this.userName = 'lisi'