UNPKG

@realsee/dnalogel

Version:
104 lines (103 loc) 2.54 kB
function v(f) { return typeof Symbol == "undefined" ? `$Symbol<${f}>$` : Symbol(f); } const r = v("$$EVENT$$"); function n(f) { return f[r] || (f[r] = {}), f[r]; } function d(f) { f[r] && delete f[r]; } class E { /** * 判断是否注册了事件 * @param name - 事件类型 */ hasListener(t) { const e = n(this); return !!(e != null && e[t] && e[t].length > 0); } /** * 注册事件 * @param name - 事件类型 * @param callback - 事件回调函数 * @param once - 是否只执行一次 * @returns 解除事件 * @template K - 预设的监听事件名称 * @template C - 回调函数函数上下文 */ on(t, e, o) { const s = n(this); return s[t] || (s[t] = []), s[t].push([e, o || !1]), () => this.off(t, e); } /** * 注册事件(是否只执行一次) * @param name - 事件类型 * @param callback - 事件回调函数 * @returns 解除事件 * @template K - 预设的监听事件名称 * @template C - 回调函数函数上下文 */ once(t, e) { return this.on(t, e, !0); } /** * 解除事件 * * 如果 name 不传的话解除对应所有事件 * 如果 name, callback 不传的话解除所有name的所有事件 * @param name - 事件类型 * @param callback - 事件回调函数 * @template K - 预设的监听事件名称 */ off(t, e) { if (t === void 0) { d(this); return; } const o = n(this); if (o[t] || (o[t] = []), e === void 0) { o[t].length = 0; return; } let s = 0; for (; s < o[t].length && o[t][s][0] !== e; s++) ; s < o[t].length && o[t].splice(s, 1); } /** * 触发事件 * @param name - 事件类型 * @param data - 触发事件的数据 * @returns canceled 是否被触发取消 * @template K - 预设的监听事件名称 */ emit(t, ...e) { let o = !1; const l = n(this)[t] || []; for (let c of l.slice()) { const [i, u = !1] = c, h = i(...e); u && this.off(t, i), h === !1 && (o = !0); } return o; } /** * 触发事件并返回监听器的返回值 * @param name - 事件类型 * @param data - 触发事件的数据 * @returns 监听器的返回值数组 * @template K - 预设的监听事件名称 */ emitWithResult(t, ...e) { let o; const l = n(this)[t] || []; for (let c of l.slice()) { const [i, u = !1] = c, h = i(...e); o || (o = h), u && this.off(t, i); } return o; } } export { E as Subscribe };