美文网首页
js 设计模式 (观察者模式)

js 设计模式 (观察者模式)

作者: 我想买头骆驼带它去看大海 | 来源:发表于2020-06-08 14:48 被阅读0次
什么是观察者模式
  • 类似于派发事件一样的存在,也可以说是类似监听事件,只不过它是实现这些的原理
  • 不理解也没关系,代码可以清楚的解释,如下:
// 创建 观察者类 
 class Observer {
   
    constructor() {
       //事件处理函数集合
       this.handles = {}
   }
     //订阅事件
  on(eventType, handle) {
      //判断非继承属性  也就是自身{} 这里面有无这个属性
      if (!this.handles.hasOwnProperty(eventType)) {
          this.handles[eventType] = []
      }
      if (typeof handle == 'function') {
          this.handles[eventType].push(handle)
      } else {
          throw new Error('缺少回调函数')
      }
      return this;                        //返回this 是为了 链式操作
  }
  //发布事件
  emit(eventType, ...args) {
      if (this.handles.hasOwnProperty(eventType)) {
          this.handles[eventType].forEach((item, key, arr) => {
              // 把你传入的参数 传递给handle(回调函数)
              item.apply(null, args)
          });
      } else {
          throw new Error(`${eventType}事件未注册`)
      }
      return this
  }
   //删除事件
  off(eventType, handle) {
      if (!this.handles.hasOwnProperty(eventType)) {
          throw new Error(`${eventType}事件未注册`)
      }
      else if (typeof handle != 'function') {
          throw new Error('缺少回调函数')
      }
      else {
          this.handles[eventType].forEach((item, key,arr) => {
              if (item == handle) {
                  arr.splice(key, 1)
              }
          })
      }
      return this              
  }

}

let callFn=function(){
  console.log('执行了回调函数callFn')
}

let observer = new Observer()
//注册监听事件 'event1'
observer.on('event1', (...args) => {
  console.log(args)
}).on('event1', callFn);

//派发事件 'event1'
observer.emit('event1',1,2,3,4,5)
// 删除掉 callFn 回调
observer.off('event1', callFn);

observer.emit('event1', 7);

运行结果

[ 1, 2, 3, 4, 5 ]
执行了回调函数callFn
[ 7 ]

相关文章

  • js的4种设计模式及Vue小结(1)

    4种js设计模式 模块模式(module) 原型模式(prototype) 观察者模式(observer) 单例模...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 2021-11-18 - 学习记录

    观察者模式 - js

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

网友评论

      本文标题:js 设计模式 (观察者模式)

      本文链接:https://www.haomeiwen.com/subject/liyazhtx.html