diff --git a/imp.js b/imp.js new file mode 100644 index 0000000..631dda8 --- /dev/null +++ b/imp.js @@ -0,0 +1,42 @@ +class SimplePubSub { + events = []; + subscribe(event, listener) { + this.events.push({ event, listener }); + } + + unsubscribe(event, listener) { + this.events = this.events.filter(item => item.event !== event || item.listener !== listener); ; + } + publish(event, data) { + this.events.forEach(item => { + if (item.event === event) { + item.listener(data); + } + }); + } +} + +// 创建 PubSub 实例 +const pubSub = new SimplePubSub(); + +// 定义订阅者 +const subscriber1 = (data) => { + console.log(`Subscriber 1 received: ${data}`); +}; + +const subscriber2 = (data) => { + console.log(`Subscriber 2 received: ${data}`); +}; + +// 订阅事件 +pubSub.subscribe('event1', subscriber1); +pubSub.subscribe('event1', subscriber2); + +// 发布事件 +pubSub.publish('event1', 'Hello, World!'); + +// 取消订阅 +pubSub.unsubscribe('event1', subscriber1); + +// 发布事件 +pubSub.publish('event1', 'Hello again!'); \ No newline at end of file