<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
class EventEmitter {
constructor() {
this.emap = {}
}
on(ename, efn) {
let efns = this.emap[ename]
if (efns === undefined) {
efns = []
this.emap[ename] = efns
}
efns.push(efn)
}
emit(ename, ...args) {
const efns = this.emap[ename]
if (efns === undefined) {
return
}
for (const fn of efns) {
fn(...args)
}
}
off(ename, efn) {
const efns = this.emap[ename]
for (let i = 0; i < efns.length; i++) {
if (efns[i] === efn) {
efns.splice(i, 1)
break
}
}
if (efns.length === 0) {
delete this.emap[ename]
}
}
}
</script>
</body>
</html>