vue2
let obj = {
userNmae: '小红',
pass: '1234'
}
let hijack = {}
for (let i in obj) {
Object.defineProperty(hijack, i, {
get() {
return obj[i]
}
set(newValue){
obj[i] = newValue
}
})
}
hijack.userName = '小蓝'
console.log(hijack.userName, hijack.pass) // 小蓝, 1234
vue3
作者知道 vue3 是 Proxy 实现的,虽然并没有看过源码,但用 es6 中的 Proxy 实现上述 vue2 中的效果,还是可以的。
let proxy = new Proxy(obj, {
// target: 目标对象, propKey: 键名, receiver: proxy实例本身(可选)
get(target, propKey, receiver){
return target[propKey]
},
// value: 要赋的值
set(target, propKey, value, receiver){
target[propKey] = value
}
})
proxy.userName = '小绿'
console.log(proxy.userName, proxy.pass) // 小绿, 1234
作者水平有限,如有错误和不足,欢迎指出。