js实现发布订阅模型(雏形)
2013-08-20 09:33
316 查看
Email:longsu2010 at yeah dot net 今天花了一点时间写了个订阅发布模式的雏形,仅是一个雏形,写的很简单,很不完善,比如事件(主题)回调函数的this都没做处理。 有时间再继续完善吧,或者说有人顶我就有动力来完善,现阶段仅供抛砖,有任何疏漏错误欢迎指正。(function(){/*** 事件对象的构造函数*/function Event(name){this.name = name;this.handlers = [];}Event.prototype.getName = function(){return this.name;};Event.prototype.fire = function(evtArgs){for(var i = 0, ii = this.handlers.length; i < ii; i++){// var h = this.handlers[i];// h(evtArgs);this.handlers[i](evtArgs);}};Event.prototype.addHandler = function(handler){this.handlers.push(handler);};Event.prototype.removeHandler = function(handler){for(var i = 0, ii = this.handlers.length; i < ii; i++){if(handler === this.handlers[i]){this.handlers.splice(i, 1);break;}}};/*** 事件订阅发布函数*/var topic = {_events : [],_getEvent : function(evtName){for(var i = 0, ii = this._events.length; i < ii; i++){if( evtName === this._events[i].getName() ){return this._events[i];}}this._events.push( new Event(evtName) );return this._events[i];},// 发布事件的方法publish : function(evtName, evtArgs){this._getEvent(evtName).fire(evtArgs);},// 订阅事件的方法subscribe : function(evtName, handler){this._getEvent(evtName).addHandler(handler);},// 取消订阅的方法unsubscribe : function(evtName, handler){this._getEvent(evtName).removeHandler(handler);}};var a = function(){console.dir(arguments);console.log('a callback');};topic.subscribe('a', a);topic.publish('a', '000');topic.unsubscribe('a', a);topic.publish('a');})();
相关文章推荐
- js实现发布订阅模型(雏形)
- nodejs redis 发布订阅机制封装实现方法及实例代码
- js设计模式中发布与订阅实现观察者模式例子
- arcgis for js实现GP服务创建、发布、调用(GP模型制作与发布服务)
- node.js+redis+express 实现发布订阅功能
- js发布订阅实现双向数据绑定
- js 发布订阅模型的模拟和可变参数
- Js实现订阅发布模式(让你的代码写得贼六)
- 用postal.js在AngularJS中实现订阅发布消息
- 用postal.js在AngularJS中实现订阅发布消息
- 学习笔记-js发布/订阅模式的简单实现
- js发布——订阅模式的通用实现及取消订阅
- SQL SERVER 2008 利用发布订阅方式实现数据库同步
- RabbitMQ订阅发布的消息,通过WebSocket实现数据实时推送到前端
- redis实现消息队列&发布/订阅模式使用
- SQL Server 中心订阅模型(多发布单订阅)
- 【JS】发布/订阅模式
- python 实现redis订阅发布功能
- 基于JS原生的事件订阅和发布模式代码
- Java实现redis的消息订阅和发布