zoukankan      html  css  js  c++  java
  • 观察者模式

    class PubSub {
      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
      }
      // 订阅事件
      emit(eventType, ...args) {
        if(this.handles.hasOwnProperty(eventType)) {
          this.handles[eventType].forEach((item, key, arr) => {
            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 callback = function () {
      console.log('you are so nice');
    }
    let pubsub = new PubSub();
    pubsub.on('completed', (...args) => {
      console.log(args.join(' '));
    }).on('completed', callback);
    pubsub.emit('completed', 'what', 'a', 'fucking day');
  • 相关阅读:
    Tina系统的安装
    检查有无相机的权限
    BarEasy打印小程序_CS
    js的websocket
    生成GUID
    读取excel数据到数据库里
    字符串trim
    使用 runOnUiThread在线程内更新UI
    PdfDocument生成PDF,总是产生空文件
    打印36进制的条码序列号
  • 原文地址:https://www.cnblogs.com/Roxxane/p/14760222.html
Copyright © 2011-2022 走看看