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])
}
}
}
}
const testEvent = new EventEmmirrer();
testEvent.addEventListener('test1', (t) => {
console.log(`test1 ${t}`)
})
testEvent.addEventListener('test1', (t) => {
console.log(`test2 ${t}`)
})
testEvent.emit('test1', 'haha')