53 lines
960 B
JavaScript
53 lines
960 B
JavaScript
|
/**
|
||
|
* {注入的js}
|
||
|
* @author yutent<yutent.io@gmail.com>
|
||
|
* @date 2023/07/21 17:38:11
|
||
|
*/
|
||
|
|
||
|
Object.assign(window, {
|
||
|
//
|
||
|
__events__: Object.create(null),
|
||
|
|
||
|
$on(name, fn) {
|
||
|
if (this.__events__[name]) {
|
||
|
this.__events__[name].push(fn)
|
||
|
} else {
|
||
|
this.__events__[name] = [fn]
|
||
|
}
|
||
|
},
|
||
|
|
||
|
$once(name, fn) {
|
||
|
fn.__once__ = true
|
||
|
this.$on(name, fn)
|
||
|
},
|
||
|
|
||
|
$off(name, fn) {
|
||
|
if (this.__events__[name]) {
|
||
|
if (fn) {
|
||
|
this.__events__[name] = this.__events__[name].filter(it => it !== fn)
|
||
|
} else {
|
||
|
this.__events__[name] = []
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
$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)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
$destroy() {
|
||
|
this.__events__ = Object.create(null)
|
||
|
}
|
||
|
})
|