观察者模式 ( Observer mode ) 指的是函数自动观察数据对象,当数据对象发生改变,函数会自动执行。
1 | const person = observable({ |
上面代码中,数据对象 person
是观察对象,函数 print
是观察者。当数据对象 person
发生变化, print
就会自动执行。
使用 Proxy 写一个观察者模式的最简单实现,即实现 observable
和observe
这两个函数。思路是 observable
函数返回一个原始对象的 Proxy 代理,拦截赋值操作,触发充当观察者的两个函数。
1 | const queuedObservers = new Set(); |
上面代码中,先定义了一个 Set
集合,所有观察者函数都放进这个集合。observable
函数返回原始对象的代理,拦截赋值操作。拦截函数 set
中会自动执行的所有观察者。