微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 param 'handler' 应该用发布/订阅模式在 JS 中包装到一个监听器中?

如何解决为什么 param 'handler' 应该用发布/订阅模式在 JS 中包装到一个监听器中?

我看过某人的带有发布/订阅模式的 EventHub 代码

invocableHandlerMethod.doInvoke

我在 export class EventHub<E extends Emiter> { private cached: { [name in keyof E]: EventListener[] } = {} as any public on<N extends keyof E>(eventName: N,handler: Handler<E[N]>) { if (!handler) { throw new Error('invaild handler') } if (!this.cached[eventName]) { this.cached[eventName] = [] } const listener = new EventListener(eventName as string,handler,this) this.cached[eventName].push(listener) } public emit<N extends keyof E>(eventName: N,data: E[N] = null) { const listeners = this.cached[eventName] if (!eventName) { throw new Error('invaild eventName') } listeners.forEach((listener) => { listener.handler.call(this,data) }) } public off<N extends keyof E>(eventName: N,target?: EventListener): boolean { // find the listener // ... listener.distory() // ... return false } } 中发现参数 public on() 被包装成一个 handler

EventListener

这对包装器来说是必要的吗?

您能否简要解释一下为什么成为 class EventListener { public eventName: string public emitter: EventHub<any> public handler: Handler<any> public distoried: boolean = false constructor(eventName: string,handler: Handler<any>,emitter: EventHub<any>) { this.eventName = eventName this.handler = handler this.emitter = emitter } public unregister() { this.emitter.off(this.eventName,this) this.distory() } public distory(): boolean { if (this.distoried) { return false } this.handler = null this.emitter = null this.distoried = true return true } } 是有利的?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。