<body>
<script>
// vue2 的数据绑定原理: ES5原生语法的 Object.defineProperty
var obj = {}
Object.defineProperty(obj, "age", {
get(){
if(this.tempAge){
return this.tempAge
}else{
return 10
}
},
set(value){
this.tempAge = value
// 在set中数据更新后,调用虚拟DOM更新视图
}
})
console.log(1, obj)
console.log(2, obj.age)
obj.age = 20;
console.log(3, obj.age)
// vue3 的数据绑定原理: ES6原生语法的 new Proxy() 代理对象
var obj2 = {age: 30, name: '张三'}
var proxyObj = new Proxy(obj2, {
get(target, prop){
// 参数一是原始对象obj2, 参数二是获取的字段名age
console.log(target, prop)
// return "myage"
return target[prop]
},
set(target, prop, value){
target[prop] = value
// 在set中数据更新后,调用虚拟DOM更新视图
}
})
console.log(4, proxyObj)
console.log(4, proxyObj.age, proxyObj.name)
proxyObj.age = 40;
proxyObj.name = '李四'
console.log(5, proxyObj.age, proxyObj.name)
</script>
</body>