vue中的data数据为什么可以直接this就能拿到data里面的数据,底层思路就是用的Object.defineProperty方法进行的劫持代理方法的。 下面是代码实现的过程
js
// 模拟data数据
let data = {
name: 'chen',
age: 18
}
// 模拟组件的实例
let _this = {}
// 利用object.defineProperty()
for(let item in dta) {
Object.definProperty(_this,item, {
// get: 用来获取扩展属性值,当获取该属性值的时候调用get方法
get(){
return data[item]
},
// set: 监视扩展属性的,只要已修改就调用
set(newValue) {
data[item] = newValue
}
})
}
_this.name = 'wade'
console.log(_this.name)