6 观察者模式off方法
二.观察者模式off方法
<script>// 观察者模式的off方法// 在已经添加到消息盒子中的类型以及方法中,删除方法// 如果有这个类型,有这个方法,再执行删除操作,如果没有,不做任何操作class Observer{constructor(){this.msg = {};}on(type,fun){if(this.msg[type] === undefined){this.msg[type] = [fun] ; }else{this.msg[type].push(fun);}}emit(){}off(type,fun){// 如果类型方法存在,再执行删除方法,如果类型方法不存在,不执行任何操作// 如果类型不存在if( this.msg[type] === undefined ){// 执行return,终止程序执行,不做任何操作return;}// 从类型中,查找函数方法,从数组中删除this.msg[type].forEach((item,key)=>{// 存储的函数,与输入的要删除的函数相同if(item === fun){// 从当前单元的索引开始,删除一个单元this.msg[type].splice(key , 1);// 防止数组坍塌// 数组只要做删除操作,就要有i--// i--;// 如果是for循环,就要写i--}})}}const observer = new Observer();// 第一次新增打电话类型,是新增类型,并且赋值一个数组,存储函数observer.on('打电话' , da1);// 打电话,类型已经存在,直接向数组中新增函数就可以了observer.on('打电话' , da2);// 写检查observer.on('写检查' , jian1);observer.on('写检查' , jian2);observer.on('写检查' , jian3);// 没收手机observer.on('没收手机' , mo1);observer.on('没收手机' , mo2);observer.on('没收手机' , mo3);// 删除事件observer.off('没收手机' , mo1);observer.off('没收手机' , mo2);console.log(observer);function da1(){console.log('请老爸,下午2点来学校');}function da2(){console.log('请老妈,下午3点来学校');}function jian1(){console.log('给班主任写1000字的检查');}function jian2(){console.log('给教导主任写2000字的检查');}function jian3(){console.log('给校长写3000字的检查');}function mo1(){console.log('没收手机1天');}function mo2(){console.log('没收手机1年');}function mo3(){console.log('没收手机1辈子');}</script>
6 观察者模式off方法相关推荐
- java 自带观察者模式_java 内置的观察者模式
1.可观察的对象 public class PurchaseDate extends Observable { private int Id; private String orderNumber; ...
- java设计模式(六)--观察者模式
转载:设计模式(中文-文字版) 目录: 简单目标任务实现 观察者模式介绍 观察者模式代码实现 观察者模式是JDK中使用最多的模式之一,非常有用.我们也会一并介绍一对多关系,以及松耦合(对,没错,我们说 ...
- php 观察者模式怎么用,php怎么实现观察者模式
php实现观察者模式的方法:首先创建一个PHP示例文件:然后实现观察者向主题注册:最后对注册树进行遍历,让每个对象实现其接口提供的操作即可. 本文操作环境:windows7系统.PHP7.1版,DEL ...
- java observer update_Java_观察者模式(Observable和Observer) -转
一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时 ...
- 设计模式之:解剖观察者模式【z】
论坛上很多人都讲设计模式,也讲了很多设计模式,现在也来说说我对一些设计模式的理解,对于一些简单的模式就不多说了,一切都在我以前写的例子中使用到了,比如说在velocity和freemarker的比较那 ...
- Java进阶 | 从整体上观察面向对象
一.面向对象 面向对象是Java编程中最核心的思想,基本特征:继承.封装.多态. 1.特征之封装 将结构.数据.操作封装在对象实体中,使用时可以不关注对象内部结构,只能访问开放权限的功能入口,从而降低 ...
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...
- [课业] 18 | 软工 | 软件体系结构基础
文章目录 软件体系结构的发展 软件架构发展历史 软件架构的重要性 理解软件体系结构 概念和定义 区分物理和逻辑 高层抽象 概述 部件 连接件 配置 高层抽象的好处 体系结构风格初步 主程序.子程序风格 ...
- 《Head First设计模式》读书笔记
目录 一.设计模式入门与策略模式 二.观察者模式 三.装饰者模式 四.工厂模式 五.单件模式 六.命令模式 七.适配器与外观模式 八.模板方法模式 九.迭代器与组合模式 十.状态模式 十一.代理模式 ...
- [iOS] 图文讲解原生二维码有效扫描区域 rectOfInterest
在使用原生的 AVFoundation 框架实现二维码扫描的时候, 需要注意一下两个方面: 启动相机的卡顿问题; 有效扫描区域的问题; 本文主要针对这两个问题进行讲解. 1. 启动扫描卡顿 在Push ...
最新文章
- [FLASH_AS]Flash as3 addEventListener事件监听传递参数
- 1月28日昆山杜克大学和西交利物浦大学太仓校区参观有感
- 联想拯救者Y7000P 2021H deepin v20.2.4设置双屏显示:切记要用集显,NAVIDA独显不生效
- Eclipse的基本设置
- android jdk环境的配置
- (03)System Verilog 通用总线激励驱动方法
- ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用
- 在VC中使用Delphi构造公共对话框
- SpringBoot+Dubbo实战demo
- 【CV】如何使用Tensorflow提供的Object Detection API--3--手工标注数据
- 抖音在线无水印解析PHP源码
- Mac 隔空投送 AirDrop 搜不到 iPhone
- 零售3.0时代,国民品牌都市丽人一次成功的变革
- 【hadoop生态之ZooKeeper】第一章Zookeeper概述【笔记+代码】
- 如何使用 JAVA 开发微信登录教程
- iOS集成Cordova开发教程遇到的问题
- JQuery中的each()方法和$.each()函数的使用
- 何为非侵入式负荷识别-负荷辨识
- Excel设置下拉选项的方法
- SS00007.algorithm——|ArithmeticMachine.v07|——|Machine:监督学习算法.v06|
热门文章
- win10装debian 双系统_如何安装win10和linux [ubuntu14]双系统
- 代码审计jizhiCMS 后台getshell
- java解析project mpp文件_Java解析Project mpp文件
- 计算机休眠唤醒原理,电脑休眠和睡眠区别以及怎么唤醒
- 无线局域网和蜂窝移动网络_为什么 iPhone 的数据流量叫做「蜂窝移动网络」?...
- GridLayout 介绍 (转载自http://www.cnblogs.com/skywang12345/p/3154150.html)
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
- OpenCV 对比度增强
- 多个excel表合并成一个excel表
- 微信公众平台开发(十二) 发送客服消息