2023-07-21 19:13:51 +08:00
|
|
|
/**
|
|
|
|
* {注入的js}
|
|
|
|
* @author yutent<yutent.io@gmail.com>
|
|
|
|
* @date 2023/07/21 17:38:11
|
|
|
|
*/
|
|
|
|
|
2023-07-24 15:05:01 +08:00
|
|
|
class EventEmitter {
|
2023-07-21 19:13:51 +08:00
|
|
|
//
|
2023-07-24 15:05:01 +08:00
|
|
|
__events__ = Object.create(null)
|
2023-07-21 19:13:51 +08:00
|
|
|
|
|
|
|
$on(name, fn) {
|
|
|
|
if (this.__events__[name]) {
|
|
|
|
this.__events__[name].push(fn)
|
|
|
|
} else {
|
|
|
|
this.__events__[name] = [fn]
|
|
|
|
}
|
2023-07-24 15:05:01 +08:00
|
|
|
}
|
2023-07-21 19:13:51 +08:00
|
|
|
|
|
|
|
$once(name, fn) {
|
|
|
|
fn.__once__ = true
|
|
|
|
this.$on(name, fn)
|
2023-07-24 15:05:01 +08:00
|
|
|
}
|
2023-07-21 19:13:51 +08:00
|
|
|
|
|
|
|
$off(name, fn) {
|
|
|
|
if (this.__events__[name]) {
|
|
|
|
if (fn) {
|
|
|
|
this.__events__[name] = this.__events__[name].filter(it => it !== fn)
|
|
|
|
} else {
|
|
|
|
this.__events__[name] = []
|
|
|
|
}
|
|
|
|
}
|
2023-07-24 15:05:01 +08:00
|
|
|
}
|
2023-07-21 19:13:51 +08:00
|
|
|
|
|
|
|
$emit(name, ...args) {
|
|
|
|
if (this.__events__[name]) {
|
|
|
|
for (let fn of this.__events__[name]) {
|
|
|
|
try {
|
|
|
|
fn.apply(this, args)
|
|
|
|
if (fn.__once__) {
|
|
|
|
this.$off(name, fn)
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.error(e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-07-24 15:05:01 +08:00
|
|
|
}
|
2023-07-21 19:13:51 +08:00
|
|
|
|
|
|
|
$destroy() {
|
|
|
|
this.__events__ = Object.create(null)
|
|
|
|
}
|
2023-07-24 15:05:01 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
window.native = new EventEmitter()
|