// 发布订阅对象
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();