JS中的发布-订阅者模式 迷南。 2022-04-23 13:54 208阅读 0赞 ## 一、前言 ## 学习vue的时候,对深入响应式原理模模糊糊的,现在简单一下理解。 ### 二、简述VUE响应原理。 ### > vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter, > 在数据变动时发布消息给订阅者,触发相应的监听回调。 ### 三、什么是发布-订阅者模式 ### 简单理解:比如一个商店,会员粉丝经常要询问有什么活动,员工每次都要做一遍解答,工作重复又麻烦,但是把所有会员的邮箱收集成名单,有活动时统一发送邮件。会员就是订阅者,商店就是发布者会在合适的时候遍历名单,依次给会员发布消息。发送邮件通知就是一个的发布—订阅模式 > 多个订阅者(一般是注册的函数)同时监听同一个数据对象,当这个数据对象发生变化的时候会执行一个发布事件,通过这个发布事件会通知到所有的订阅者,使它们能够自己改变对数据对象依赖的部分状态。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FsaXNhX2xpc2E_size_16_color_FFFFFF_t_70] ### 四、发布订阅者模式的作用 ### 主要为了处理一对多的场景,应用于不同情况下的不同函数的调用 > 优点:耦合性低,便于代码的维护 > 缺点:创建订阅者本身要消耗一定的时间和内存,可能订阅的消息未发生,但这个订阅者会始终存在于内存中 ### 五、代码示例 ### * 创建发布-订阅者模式的对象 function Event () { this.handlers = { }; } Event .prototype = { // 订阅事件 on: function(eventType, handler){ var self = this; if(!(eventType in self.handlers)) { self.handlers[eventType] = []; } self.handlers[eventType].push(handler); return this; }, // 触发事件(发布事件) emit: function(eventType){ var self = this; var handlerArgs = Array.prototype.slice.call(arguments,1); for(var i = 0; i < self.handlers[eventType].length; i++) { self.handlers[eventType][i].apply(self,handlerArgs); } return self; }, // 删除订阅事件 off: function(eventType, handler){ var currentEvent = this.handlers[eventType]; var len = 0; if (currentEvent) { len = currentEvent.length; for (var i = len - 1; i >= 0; i--){ if (currentEvent[i] === handler){ currentEvent.splice(i, 1); } } } return this; } }; * 使用发布-订阅者模式 let Publisher = new Event (); //订阅事件a Publisher.on('a', function(e){ console.log(1 + e); }); Publisher.on('a', function(e){ console.log(2 + e); }); //触发事件a Publisher.emit('a', '我是第1次调用'); Publisher.emit('a', '我是第2次调用'); [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FsaXNhX2xpc2E_size_16_color_FFFFFF_t_70]: /images/20220309/4514edb3da024112be207d89f954da22.png
相关 观察者模式 vs 发布订阅模式 目录 场景 观察者模式 发布订阅模式 总结 -------------------- 场景 有一回面试,面试官问: 末蓝、/ 2023年10月06日 19:03/ 0 赞/ 3 阅读
相关 js 发布-订阅者模式 / 发布-订阅模式 bw 2020/07/29 / const Event = { regsiter:{}, た 入场券/ 2022年10月31日 10:57/ 0 赞/ 166 阅读
相关 js 订阅者模式(观察者模式) 原文网址:http://www.cnblogs.com/LuckyWinty/p/5796190.html [附加题] 请实现下面的自定义事件 Event 对 悠悠/ 2022年07月15日 13:15/ 0 赞/ 194 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 217 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 213 阅读
相关 JS中的发布-订阅者模式 一、前言 学习vue的时候,对深入响应式原理模模糊糊的,现在简单一下理解。 二、简述VUE响应原理。 > vue.js 是采用数据劫持结合发布者-订阅者模式的方式 迷南。/ 2022年04月23日 13:54/ 0 赞/ 209 阅读
相关 【设计模式】实现一个简单的js发布-订阅者模式 一 概念 发布—订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。 太过爱你忘了你带给我的痛/ 2022年03月10日 10:42/ 0 赞/ 199 阅读
相关 JavaScript发布订阅者模式 假如你要建立一个网站,通常来说会有许多用户。你作为一名管理者,有时候需要将重要的消息发布给你的用户。在软件开发领域,开发此功能往往用到发布订阅者模式。下面我以简单的javasc 朴灿烈づ我的快乐病毒、/ 2022年01月20日 02:09/ 0 赞/ 260 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 293 阅读
还没有评论,来说两句吧...