// 發(fā)布訂閱對象
var PubSub = {};
// 事件存儲(chǔ)對象
var Events = {};
// 訂閱事件
PubSub.subscribe = function(eventName, eventFunc){
var currentEvents = Events[eventName];
!currentEvents && (function(){
Events[eventName] = [];
})();
Events[eventName].push(eventFunc);
}
// 發(fā)布事件
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("發(fā)布了事件A");
}
var eventFunc_B = function(){
console.log("發(fā)布了事件B");
}
// 訂閱A事件
PubSub.subscribe("eventFunc_A", eventFunc_A);
// 訂閱B事件
PubSub.subscribe("eventFunc_B", eventFunc_B);
// 取消B事件訂閱
PubSub.cancelSub("eventFunc_B", eventFunc_B);
// 發(fā)布A事件
PubSub.publish("eventFunc_A");
// 發(fā)布B事件
PubSub.publish("eventFunc_B");
}
test();