Files
2023-06-20 10:33:32 +08:00

1 line
1.0 KiB
JavaScript

import Logger from"./logger.js";new Logger("Event").logInfo("Event.js 已加载");export class Events{constructor(e){this.target={},this.eventsQueue={},this.disallowRepeat=!1}add(e=[],t,s){for(let n of e)this.on(n,t,s)}on(e,t,s){if(void 0===this.eventsQueue[e]&&(this.eventsQueue[e]={methods:[]}),"function"==typeof t){if(!this.disallowRepeat||!this.eventsQueue[e].methods.includes(t))return void 0!==s&&(t.once=s),this.eventsQueue[e].methods.push(t),this.target}else logger.error("on","the argument is not function.",t)}once(e,t){this.on(e,t,!0)}off(e,t){let s=this.eventsQueue[e];if(!s)return;let n=s.methods;if(t){let e=n.length;for(;e--;)n[e]===t&&n.splice(e,1)}else delete this.eventsQueue[e];return this.target}emit(e,...t){let s=this.eventsQueue[e];if(s)return s.methods.forEach((s=>{s.apply(this.target,t),s.once&&this.off(e,s)})),this.target}clear(e){delete this.eventsQueue[e]}clearAll(){this.eventsQueue={}}}export const events=e=>new Events(e);const getEvents=function(e){const t=new Events(e);return e=>(t.target=e,t)};export default getEvents;