首先了解一下代理和监听
一段demo:需求是n不能小于0
let data1 = proxy({
data: {
n: 0 } })//括号里是匿名对象,无法访问
function proxy({
data }) {
const obj = {}
Object.defineProperty(obj, 'n', {
get() {
return data.n//读取
},
set(value) {
if (value < 0) return
data.n = value
}
})
return obj //obj就是代理
}
//data1 就是 obj
console.log(`${
data1.n}`)//0
data1.n = -1
console.log(`${
data1.n`},设置为-1失败`)//0
data1.n = 1
console.log(`${
data1.n`},设置为1成功`)//1
- 我们弄一个匿名对象data,不给变量引用,防止被用户乱改
- 声明一个空对象obj,然后需要对obj添加名为n的虚拟属性