javascript发布订阅模式的详解(附示例)

如果下载的源码需要作者授权,请更换源码。本站免费分享资源不会增加授权

本篇文章给大家带来的内容是关于javascript发布订阅模式的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

发布订阅模式

事件发布/订阅模式 (PubSub) 在异步编程中帮助我们完成更松的解耦,甚至在 MVC、MVVC 的架构中以及设计模式中也少不了发布-订阅模式的参与。

优点:在异步编程中实现更深的解耦

缺点:如果过多的使用发布订阅模式,会增加维护的难度

实现发布订阅模式

var Event = function() {     this.obj = {} }  Event.prototype.on = function(eventType,fn) {     if(!this.obj[eventType]) {         this.obj[eventType] = []     }     this.obj[eventType].push(fn) }  Event.prototype.emit = function() {     // 取第一个参数,作为eventType     var eventType = Array.prototype.shift.call(arguments);     //  获取事件数组     var arr = this.obj[eventType];     var len = arr.length;     // 循环数组,一次执行其中的函数     for(var i=0;i<len;i++) {         // 直接调用arr[i],其this指向为undefined(严格模式下)         // 因此用apply将this指向arr[i]         // 数组shift函数取出第一个参数,将剩下的参数传入函数中         arr[i].apply(arr[i],arguments)     } }  var ev = new Event() ev.on('click',function(a) {  // 订阅     console.log(a) })  ev.emit('click',1)   // 发布

以上代码只能实现先订阅,再发布。直接发布就会报错。如何实现可以先发布,然后订阅?

var Event = function() {     this.obj = {};     this.cacheList = []; }  Event.prototype.emit = function() {     const args = arguments;  //函数参数     const that = this;  //this指向,保持cache函数的this指向     function cache() {         var eventType = Array.prototype.shift.call(arg)         var arr = that.obj[eventType]         for (let i = 0; i < arr.length; i++) {           arr[i].apply(arr[i], arg)         }     }     this.cacheList.push(cache)  // 采用闭包,保持对emit函数中参数和that的引用 }  Event.prototype.on = function(eventType,fn) {     if(!this.obj[eventType]) {         this.obj[eventType] = []     }     this.obj[eventType].push(fn)     // 在订阅函数中执行emit函数中缓存的函数     for (let i = 0; i < this.cacheList.length; i++) {         this.cacheList[i]()     } }

改成这样后就实现了先发布函数,再订阅的过程。但是也只能先发布,然后再订阅,反过来就行不通。

本文由(壳先生)整理自网络,如转载请注明出处:https://www.mrshell.com;
本站发布的内容若侵犯到您的权益,请邮件联系 i@mrshell.com 删除,我们将及时处理!
===========================================================================

1. 本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2. 本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3. 不得使用于非法商业用途,商用请支持正版!不得违反国家法律,否则后果自负!
4. 若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

=================================================================

壳先生 » javascript发布订阅模式的详解(附示例)

发表评论

提供最优质的资源集合

立即查看 了解详情