proxy是什么
Proxy的意思是代理,我们可以把它理解为一个拦截器,就是当我们操作对象时,它都会对对象的操作进行拦截,从而进行监测和改写
let person = {
name: '张三',
age:19
}
let personProxy = new Proxy(person, {
get(target,key,receiver) {
if (target.age <= 18) {
return Reflect.get(target,key,receiver)
} else {
return '张三成年了'
}
},
set(target,key,value,receiver) {
// return Reflect.set(target,key,value,receiver)
return true
}
})
Reflect并非一个构造函数,所以不能通过new运算符对其进行调用,或者将Reflect对象作为一个函数来调用。Reflect的所有属性和方法都是静态的(就像Math对象)
实现一个mobx观察者模式
let list: Set<Function> = new Set()
const run = (cb:Function) => {
if (!list.has(cb)) {
list.add(cb)
}
}
const observable = <T extends object>(params:T)=> {
return new Proxy(params, {
set(target, key, value, receiver) {
const result = Reflect.set(target, key, value, receiver)
list.forEach(fn=>fn())
return result
}
})
}
//监听一个对象
const personProxy = observable({ name: '张三' })
//订阅者
run(() => {
console.log('监听到了');
})
personProxy.name='111'