请实现一个EventEmitter

在前端开发中,EventEmitter 是一个非常常见的概念,特别是在 Node.js 和一些前端框架(如 Angular,Vue.js 中的事件系统等)中。以下是一个简单的 EventEmitter 类的实现,使用 JavaScript 编写:

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

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

    // 触发事件
    emit(eventName, ...args) {
        if (this.events[eventName]) {
            this.events[eventName].forEach(callback => {
                callback(...args);
            });
        }
    }

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

这个 EventEmitter 类有以下方法:

  • on(eventName, callback): 用于注册一个事件监听器。当指定的事件被触发时,将调用提供的回调函数。
  • emit(eventName, ...args): 用于触发一个事件。所有注册到该事件的回调函数都将被调用,并传入提供的参数。
  • off(eventName, callback): 用于移除一个事件监听器。这将从指定事件的监听器列表中删除提供的回调函数。

你可以这样使用这个 EventEmitter 类:

const eventEmitter = new EventEmitter();

// 监听一个名为 'message' 的事件
eventEmitter.on('message', (message) => {
    console.log('Received message:', message);
});

// 触发 'message' 事件,并传入一个字符串参数
eventEmitter.emit('message', 'Hello, World!'); // 输出: Received message: Hello, World!
posted @   王铁柱6  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示