手写发布订阅

80 阅读1分钟
// 手写发布订阅

class EventHub{
    map={}
    on(name,fn){
        this.map[name] = this.map[name] || []
        this.map[name].push(fn)
    }
    emit(name,data){
        const fnList = this.map[name]
        fnList.forEach(fn => fn.call(undefined,data));
    }
    off(name,fn){
        const fnList = this.map[name]
        const index = fnList.indexOf(fn)
        if(index<0){return}
        fnList.splice(index,1)
    }
}

    // 使用
    // Create an instance of EventHubs
    const eventHub = new EventHubs();

    // Define event listener functions
    function greetListener(data) {
      console.log(`Hello, ${data}!`);
    }

    function countListener(data) {
      console.log(`Count: ${data}`);
    }

    // Register event listeners
    eventHub.on('greet', greetListener);
    eventHub.on('count', countListener);

    // Emit events
    eventHub.emit('greet', 'John'); // Output: Hello, John!
    eventHub.emit('count', 10);     // Output: Count: 10

    // Remove an event listener
    eventHub.off('greet', greetListener);

    // Emit event after removing the listener
    eventHub.emit('greet', 'Alice');