js自定义事件派发类

// 事件派发类
class MessageCallback {
  /**
    * 
    * @param {String} route 
    * @param {*} msg 
    */
  static addListener(route, handler) {
    this.handlers = this.handlers || [];
    var handlers = this.handlers[route] || null;
    if (!!handlers) {
      var isHandlerExist = false;
      for (var i in handlers) {
        if (handlers.hasOwnProperty(i) && (handlers[i] === handler)) {
          isHandlerExist = true;
          break;
        }
      }
      if (!isHandlerExist) {
        handlers.push(handler);
      }
    }
    else {
      handlers = [];
      handlers.push(handler);
      this.handlers[route] = handlers;
    }
  }
  /**
   * 
   * @param {String} route 
   * @param {*} msg 
   */
  static emitMessage(route, msg) {
    this.handlers = this.handlers || [];
    var handlers = this.handlers[route] || [];
    if (!!handlers) {
      var handlersTemp = handlers.slice();
      for (var i in handlersTemp) {
        if (handlersTemp.hasOwnProperty(i) && !!handlersTemp[i].messageCallbackHandler && !handlersTemp[i].isDestroy) {
          handlersTemp[i].messageCallbackHandler(route, msg);
        }
      }
    }
  }
  /**
   * 
   * @param {String} route 
   * @param {*} msg 
   */
  static removeListener(route, handler) {
    this.handlers = this.handlers || [];
    var handlers = this.handlers[route] || null;
    if (!!handlers) {
      for (var i = 0; i < handlers.length; ++i) {
        if (handlers[i] === handler) {
          handlers.splice(i, 1);
          break;
        }
      }
    }
  };
}

// 创建全局对象
const Global = {}
Global.MessageCallback = MessageCallback

// 定义一个类
class Person {
  // static
  static type = 'person'
  // private
  height = 180;
  constructor(name, age, sex) {
    this.name = name
    this.age = age
    this.sex = sex || '男'
  }
  /**
   * 
   * @param {String} route 
   * @param {*} msg 
   */
  messageCallbackHandler(route, message) {
    console.log(route, message)
    console.log(this.name, this.sex, this.height)
  }
}

// 打印静态属性
console.log("类的静态属性 类型", Person.type)
// 创建对象实例
let person1 = new Person('lux', 24)
let person2 = new Person('lasa', 25, '女')
console.log("lux的实例对象", person1)
console.log("lasa的实例对象", person2)
Global.MessageCallback.addListener('MessagePush', person1)
Global.MessageCallback.addListener('MessagePush', person2)
console.log('全局对象上的属性 MessageCallback', Global.MessageCallback)

// 派发事件
setTimeout(() => { Global.MessageCallback.emitMessage('MessagePush', { msg: 100 }) }, 2000)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值