手写JavaScript发布订阅模式
时间: 2023-08-27 17:05:14 浏览: 132
发布订阅模式又称观察者模式,是一种常见的设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。下面是手写JavaScript发布订阅模式的一种实现方式:
```javascript
function PubSub() {
this.subscribers = {};
}
PubSub.prototype.subscribe = function(event, callback) {
if (!this.subscribers[event]) {
this.subscribers[event] = [];
}
this.subscribers[event].push(callback);
};
PubSub.prototype.unsubscribe = function(event, callback) {
if (!this.subscribers[event]) {
return;
}
var index = this.subscribers[event].indexOf(callback);
if (index > -1) {
this.subscribers[event].splice(index, 1);
}
};
PubSub.prototype.publish = function(event, data) {
if (!this.subscribers[event]) {
return;
}
this.subscribers[event].forEach(function(callback) {
callback(data);
});
};
```
使用方式如下:
```javascript
var pubsub = new PubSub();
function callback1(data) {
console.log('callback1:', data);
}
pubsub.subscribe('event1', callback1);
function callback2(data) {
console.log('callback2:', data);
}
pubsub.subscribe('event2', callback2);
pubsub.publish('event1', { message: 'hello' });
pubsub.publish('event2', { message: 'world' });
pubsub.unsubscribe('event1', callback1);
pubsub.publish('event1', { message: 'hello again' });
```
输出结果为:
```
callback1: {message: "hello"}
callback2: {message: "world"}
```
当调用 `publish` 方法时,订阅了该事件的所有回调函数都将被执行,并且可以传递一个数据对象作为参数。调用 `subscribe` 方法注册一个回调函数,当该事件被发布时,该回调函数将被执行。调用 `unsubscribe` 方法取消订阅。
阅读全文