@sdc-monitor/demo
Version:
<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>
39 lines (37 loc) • 1.21 kB
text/typescript
import { WxPerformanceItemType, Listener } from '../types/index'
class Event {
events: Map<WxPerformanceItemType | string, Array<Listener>>
constructor() {
this.events = new Map()
}
on(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this {
const ls = this.events.get(event) || []
ls.push(listener)
this.events.set(event, ls)
return this
}
emit(event: WxPerformanceItemType | string, ...args: any[]): boolean {
if (!this.events.has(event)) return false
const ls = this.events.get(event) || []
ls.forEach((fn) => fn.apply(this, args))
return true
}
remove(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this {
const ls = this.events.get(event) || []
const es = ls.filter((f) => f !== listener)
this.events.set(event, es)
return this
}
removeAll(event: WxPerformanceItemType): this {
this.events.delete(event)
return this
}
once(event: WxPerformanceItemType | string, listener: (...args: any[]) => void): this {
const fn = (...arg: any[]) => {
listener.apply(this, arg)
this.remove(event, fn)
}
return this.on(event, fn)
}
}
export default Event