mirror of
https://github.com/TencentCloud/TIMSDK.git
synced 2026-10-22 17:38:46 +08:00
ee86ebf0f1
* feat: TUIKit update Co-authored-by: chenximo <chenximo@tencent.com>
63 lines
1.2 KiB
JavaScript
63 lines
1.2 KiB
JavaScript
class EventEmitter {
|
|
on(event, fn, ctx) {
|
|
if (typeof fn !== 'function') {
|
|
console.error('listener must be a function')
|
|
return
|
|
}
|
|
|
|
this._stores = this._stores || {};
|
|
(this._stores[event] = this._stores[event] || []).push({ cb: fn, ctx })
|
|
}
|
|
|
|
emit(event) {
|
|
this._stores = this._stores || {}
|
|
let store = this._stores[event]
|
|
let args
|
|
|
|
if (store) {
|
|
store = store.slice(0)
|
|
args = [].slice.call(arguments, 1),
|
|
args[0] = {
|
|
eventCode: event,
|
|
data: args[0],
|
|
}
|
|
for (let i = 0, len = store.length; i < len; i++) {
|
|
store[i].cb.apply(store[i].ctx, args)
|
|
}
|
|
}
|
|
}
|
|
|
|
off(event, fn) {
|
|
this._stores = this._stores || {}
|
|
|
|
// all
|
|
if (!arguments.length) {
|
|
this._stores = {}
|
|
return
|
|
}
|
|
|
|
// specific event
|
|
const store = this._stores[event]
|
|
if (!store) return
|
|
|
|
// remove all handlers
|
|
if (arguments.length === 1) {
|
|
delete this._stores[event]
|
|
return
|
|
}
|
|
|
|
// remove specific handler
|
|
let cb
|
|
for (let i = 0, len = store.length; i < len; i++) {
|
|
cb = store[i].cb
|
|
if (cb === fn) {
|
|
store.splice(i, 1)
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
module.exports = EventEmitter
|