面試常用手寫eventEmitter實現


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

    on(evtName, handler) {
        if (!(evtName in this.handlers)) {
            this.handlers[evtName] = [];
        }

        this.handlers[evtName].push(handler);
    }

    emit(evtName, data) {
        if (Array.isArray(this.handlers[evtName])) {
            this.handlers[evtName].forEach(handler => handler.apply(this, [data]));
        } else {
            console.warn(`trying to emit an event ${evtName}, but no handler found!`);
        }
    }

    off(evtName, handler) {
        if (Array.isArray(this.handlers[evtName])) {
            this.handlers[evtName] = this.handlers[evtName].filter(h => {
                h !== handler;
            });
        } else {
            console.warn(`trying to off an event ${evtName}, but no handler found!`);
        }
    }
}

更多系列代碼地址:https://github.com/gongmw/js-example

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章