编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");
class EventEmmirrer {
    constructor() {
        this._event = this._event || new Map();
        this._maxEventListeners = this._maxEventListeners || 10;
    }
}

EventEmmirrer.prototype.emit = function(type, ...args) {
    let handle;

    handle = this._event.get(type)
    if(Array.isArray(handle)) {
        for(let i = 0; i< handle.length; i++) {
            if(args.length > 3) {
                handle[i].apply(this,args);
            } else {
                handle[i].call(this, args)
            }
        }
    } else {
        if(args.length > 3) {
            handle.apply(this,args);
        } else {
            handle.call(this, args)
        }
    }
    
}

EventEmmirrer.prototype.addEventListener = function(type,fn) {
    const handle = this._event.get(type);
    if(!handle) {
        this._event.set(type, fn)
    } else if(handle && handle instanceof Function) {
        this._event.set(type, [handle, fn])
    } else {
        handle.push(fn)
    }
}

EventEmmirrer.prototype.removeEventListener = function(type) {
    const handle = this._event.get(type);
    if(handle instanceof Function) {
        this._event.delete(type)
    } else {
        const index = fn.indexOf(handle)
        if(index > -1) {
            handle.splice(index, 1);
            if(handle.length === 1) {
                this._event,set(type, handle[0])
            }
        }
        // for(let i = 0; i< handle.length; i ++) {

        // }
    }
}

const testEvent = new EventEmmirrer();

testEvent.addEventListener('test1', (t) => {
    console.log(`test1 ${t}`)
})

testEvent.addEventListener('test1', (t) => {
    console.log(`test2 ${t}`)
})

testEvent.emit('test1', 'haha')