Open
Description
概念
Reflect 是一个内置的对象,提供拦截操作的方法,与 Proxy 的 handlers 方法相同。
可以配合 Proxy 使用,在 handlers 中通过 Reflect 获取默认行为,在完成默认行为的基础上做修改。
静态方法
与 Proxy handlers 相同的 13 个方法。
应用
使用 Proxy 实现观察者模式:
/** 观察者集合 */
const observerSet = new Set()
// 观察者模式方法
const observe = (fn) => observerSet.add(fn)
const observable = (obj) => new Proxy(obj, { set })
const set = (target, key, value, receiver) => {
// 先完成默认行为
const result = Reflect.set(target, key, value, receiver)
// 通知观察者变化
observerSet.forEach((observer) => observer())
return result
}
/** 观察目标 */
const person = observable({
name: 'a',
age: 18,
})
/** 观察者 */
const print = () => {
console.log(`${person.name}, ${person.age}`)
}
observe(print)
person.name = 'b' // b 18