JSUtils – 自定义EventEmitter

2025-01-02 42 0

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

    on(type, handler) {
        if (!this.events[type]) {
            this.events[type] = [];
        }
        this.events[type].push(handler);
    }

    emit(type, ...args) {
        if (!this.events[type]) {
            return;
        }
        this.events[type].forEach((handler) => {
            handler.apply(this, args);
        });
    }

    removeListener(type, handler) {
        if (!this.events[type]) {
            return;
        }
        this.events[type] = this.events[type].filter((item) => item !== handler);
    }
}

输出:

const bus = new EventEmitter();

bus.on('event', () => {
    console.log('Event 1');
});

function event2() {
    console.log('Event 2');
}

bus.on('event', event2);

bus.emit('event');
// Output:
// Event 1
// Event 2

bus.removeListener('event', event2);
bus.emit('event');
// Output:
// Event 1

参考来源:https://segmentfault.com/a/1190000044192759

相关文章

Request – 文件流下载
JSUtils – 递归查找指定条件子节点

发布评论