请使用javascript实现一个EventMitter类

在前端开发中,EventEmitter 是一种常用的设计模式,它允许事件的发送者与接收者解耦。下面是一个简单的 EventEmitter 类的实现,使用了 JavaScript:

class EventEmitter {
  constructor() {
    this.events = {};
  }

  // 注册事件监听器
  on(eventName, listener) {
    if (!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(listener);
  }

  // 移除事件监听器
  off(eventName, listener) {
    if (this.events[eventName]) {
      this.events[eventName] = this.events[eventName].filter(l => l !== listener);
    }
  }

  // 触发事件,执行所有注册到该事件的监听器
  emit(eventName, ...args) {
    if (this.events[eventName]) {
      this.events[eventName].forEach(listener => {
        listener(...args);
      });
    }
  }

  // 移除所有事件的所有监听器
  removeAllListeners() {
    this.events = {};
  }
}

// 使用示例:
const emitter = new EventEmitter();

function listener1() {
  console.log('listener1 executed');
}

function listener2() {
  console.log('listener2 executed');
}

// 注册监听器
emitter.on('event1', listener1);
emitter.on('event1', listener2);

// 触发事件
emitter.emit('event1'); // 输出:listener1 executed, listener2 executed

// 移除监听器
emitter.off('event1', listener1);
emitter.emit('event1'); // 输出:listener2 executed

// 移除所有监听器
emitter.removeAllListeners();
emitter.emit('event1'); // 无输出

这个 EventEmitter 类提供了基本的事件监听和触发功能。你可以通过 on 方法注册监听器,通过 emit 方法触发事件,通过 off 方法移除监听器,以及通过 removeAllListeners 方法移除所有监听器。

来源链接:https://www.cnblogs.com/ai888/p/18665612

请登录后发表评论

    没有回复内容