基于JS原生的事件订阅和发布模式代码
2018-03-14 00:00
731 查看
const event={ //存放队列 list:[], // 事件订阅 listen:function(key,fn){ if(!this.list[key]) { this.list[key] = []; } this.list[key].push(fn); }, // 事件发布 tirgger:function(){ var key = Array.prototype.shift.call(arguments); var fns = this.list[key]; // 如果没有订阅过该消息的话,则返回 if(!fns || fns.length === 0) { return; } for(var i = 0,fn; fn = fns[i++];) { fn.apply(this,arguments); } }, // 取消订阅 remove:function(fn){ var key = Array.prototype.shift.call(arguments); var fns = this.list[key]; // 如果key对应的消息没有订阅过的话,则返回 if(!fns) { return false; } // 如果没有传入具体的回调函数,表示需要取消key对应消息的所有订阅 if(!fn) { fn && (fns.length = 0); }else { for(var i = fns.length - 1; i >= 0; i--) { var _fn = fns[i]; if(_fn === fn) { fns.splice(i,1); // 删除订阅者的回调函数 } } } } } var fn1 =function(color){ console.log(color); } event.listen('test',fn1) event.tirgger('test','red'); event.remove('test',fn1); event.tirgger('test','block');
相关文章推荐
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- js事件编程的发布/订阅模式(一对一关系)
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- Js实现订阅发布模式(让你的代码写得贼六)
- 学习笔记-js发布/订阅模式的简单实现
- js 发布订阅模式
- js事件订阅、发布
- js之发布 — 订阅模式
- JavaScript事件发布/订阅模式原理与用法分析
- nodejs redis 发布订阅机制封装实现方法及实例代码
- 基于EventAggregator的事件发布及订阅
- js原生的订阅模式
- 【JS】发布/订阅模式
- js:发布-订阅模式
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载 推荐
- node.js 发布订阅模式的实例
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载