纯JS实现事件发布订阅模式

// 发布订阅对象

var PubSub = {};

// 事件存储对象

var Events = {};

// 订阅事件

PubSub.subscribe = function(eventName, eventFunc){

var currentEvents = Events[eventName];

!currentEvents && (function(){

Events[eventName] = [];

})();

Events[eventName].push(eventFunc);

}

// 发布事件

PubSub.publish = function(eventName){

var eventFuncs = Events[eventName];

eventFuncs && (function(){

eventFuncs.forEach(function(func){

func();

})

})();

}

// 取消订阅

PubSub.cancelSub = function(eventName, eventFunc){

var currentEvents = Events[eventName];

currentEvents && (function(){

for (var i = 0; i < currentEvents.length; i++) {

if (currentEvents[i] === eventFunc) {

currentEvents.splice(i, 1);

}

}

})();

}

// 测试使用

var test = function(){

var eventFunc_A = function(){

console.log("发布了事件A");

}

var eventFunc_B = function(){

console.log("发布了事件B");

}

// 订阅A事件

PubSub.subscribe("eventFunc_A", eventFunc_A);

// 订阅B事件

PubSub.subscribe("eventFunc_B", eventFunc_B);

// 取消B事件订阅

PubSub.cancelSub("eventFunc_B", eventFunc_B);

// 发布A事件

PubSub.publish("eventFunc_A");

// 发布B事件

PubSub.publish("eventFunc_B");

}

test();

你可能感兴趣的:(纯JS实现事件发布订阅模式)