本文需要前置知识,es6的proxy和reflect的相关知识。
很多新手都不知道什么是发布订阅模式,或者说不知道有什么用,但是其实vue框架就是采用了发布订阅模式,当数据更新的时候去触发update方法更新视图的。
说白了,发布订阅模式就是,让js知道谁改变了,就做什么操作。
接下来就正式开始尝试写一个简单的发布订阅。
首先,我们有两个对象obja和objb,现在我修改他们的值,就仅仅是修改了他们本身的值,其它什么都不会发生,为了完成发布订阅模式,我需要写一个方法来订阅我想要订阅的对象
observe(objb)后,这个objb的对象就被发布了,但是发布之后我还要给它订阅事件,
我有好多事件 fun1,fun2...,我想要订阅什么方法就能给objb订阅什么方法,listen(fun1),fun1被订阅了之后,每当objb被修改了之后,就会触发fun1这个函数。
这样就完成了发布订阅的模式。
那么怎么写observe和listen这两个方法呢。
利用proxy可以对对象进行发布,重写proxy的set方法,即可完成当对象改变时,进行某些操作,
const observe = obj => new Proxy(obj,{set}) //生成被发布的对象的方法
此步完成了发布想要发布的对象,这一函数、那么set中要做什么呢,发布订阅顾名思义是要执行被订阅的函数。
我们可以想到需要一个数组来存储所有被订阅的事件,然后依次执行这些事件。
con