多次添加同一个 eventListener 的后果
Consequence of adding the same eventListener multiple times
背景: 我有一个遗留项目,我的任务是调试和修改。预算非常低,不允许进行重大重构。我正在慢慢地研究代码并遇到许多可能的问题 and/or 效率低下。
问题:多次添加同一个eventListener会有什么后果?它会覆盖现有的 eventListener 吗?这只是效率低下的问题吗?
有一个调用非常频繁的例程,它添加了 eventListeners。我放入了一个跟踪语句来确认 eventListener 冗余。
trace("*** already has eventListener", tempEventButton.hasEventListener("eventClicked"));
根据 Event Dispatcher class 上的官方 Actionscript 3.0 参考:
Keep in mind that after the listener is registered, subsequent calls
to addEventListener() with a different type or useCapture value result
in the creation of a separate listener registration.
这意味着,如果您不使用不同的类型或 useCapture 注册相同的侦听器(传递给 addEventListener
的函数),则不会创建新的 eventListener。
问题是,与执行检查以确保此事件的 addEventListener()
仅被调用一次相比,事件调度程序执行此检查的成本是否更高。无需调用 hasEventListener()
来执行此检查,您可以标记监听器已添加到 Boolean
中,这不会是一项非常昂贵的检查。
背景: 我有一个遗留项目,我的任务是调试和修改。预算非常低,不允许进行重大重构。我正在慢慢地研究代码并遇到许多可能的问题 and/or 效率低下。
问题:多次添加同一个eventListener会有什么后果?它会覆盖现有的 eventListener 吗?这只是效率低下的问题吗?
有一个调用非常频繁的例程,它添加了 eventListeners。我放入了一个跟踪语句来确认 eventListener 冗余。
trace("*** already has eventListener", tempEventButton.hasEventListener("eventClicked"));
根据 Event Dispatcher class 上的官方 Actionscript 3.0 参考:
Keep in mind that after the listener is registered, subsequent calls to addEventListener() with a different type or useCapture value result in the creation of a separate listener registration.
这意味着,如果您不使用不同的类型或 useCapture 注册相同的侦听器(传递给 addEventListener
的函数),则不会创建新的 eventListener。
问题是,与执行检查以确保此事件的 addEventListener()
仅被调用一次相比,事件调度程序执行此检查的成本是否更高。无需调用 hasEventListener()
来执行此检查,您可以标记监听器已添加到 Boolean
中,这不会是一项非常昂贵的检查。