function EventEmitter(){
this._event = Object.create(null);
}
EventEmitter.prototype.on=function(eventname,callback){
if(!this._event) this._event = Object.create(null);
if(eventname!=="newListener"){
let listeners = this._event["newListener"];
if(listeners){
this.emit("newListener",eventname)
}
}
let stack = this._event[eventname] || [];
stack.push(callback);
this._event[eventname] = stack;
}
EventEmitter.prototype.once = function(eventname,callback){
const one = (...args)=>{
callback(...args);
this.off(eventname,one)
}
one.l = callback;
this.on(eventname,one)
}
EventEmitter.prototype.off = function(eventname,callback){
if(this._event[eventname]){
this._event[eventname] = this._event[eventname].filter(item=>item!==callback&&item.l!==callback);
}
}
EventEmitter.prototype.emit=function(eventname,...args){
if(this._event[eventname]){
this._event[eventname].forEach(fn=>{
fn(...args)
})
}
}
module.exports = EventEmitter;