Vue2
// 数据源对象
let person = {
name: '张三'
}
// 数据源对象的代理对象
let p = {}
Object.defineProperty(p, 'name', {
// 读取代理对象p的name属性时调用
get() {
// 双向绑定更新
return person.name
},
// 修改代理对象p的name属性时调用
set(value) {
// 响应式修改页面处理
person.name = value
}
})
Vue3
// 数据源对象
let person = {
name: '张三',
age: 18
}
// 数据源对象的代理对象
const p = new Proxy(person, {
// 读取代理对象p的某一属性时调用
get(target, propName) {
// 双向绑定更新
return Reflect.get(target, propName)
},
// 修改或增加代理对象p的属性时调用
set(target, propName, value) {
// 响应式修改页面处理
Reflect.set(target, propName, value)
},
// 删除代理对象p的某一属性时调用
deleteProperty(target, propName) {
// 响应式修改页面处理
return Reflect.deleteProperty(target, propName)
}
})