纯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();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,330评论 0 7
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,103评论 1 10
  • 曾为遇伯牙 今生两相知 时过境迁日 咫尺却天涯
    sunny_e4af阅读 248评论 4 1
  • 最近蜜蜂视频升级了哦,在新版本上有一部日剧真是让人三观颠覆,估计这样的剧情也只有岛国人才能拍的出来了!建议大家都看...
    _阿宝_阅读 477评论 4 5