JavaScript 中自定义事件处理的不同方式有什么区别?

man*_*nta 6 javascript dom-events

我发现了以下关于 JavaScript 中自定义事件处理的帖子。从这些文章中,(至少)有两种处理/触发自定义事件的方法:

  1. 使用 DOM 方法(createEvent、dispatchEvent)
  1. 自定义代码

但是处理(触发和订阅)自定义事件的推荐方法是什么?

[编辑]这个问题的上下文不使用任何库,如 jQuery、YUI...,而只是简单的 JavaScript

[编辑2]似乎存在细微的差异,至少在错误处理方面是这样。Dean Edwards ( http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/ ) 建议采用前一种方式进行自定义事件处理。我们可以说这是有区别的吗?

Ray*_*nos 5

你所描述的是之间的区别

  • 基于自定义事件的消息传递系统
  • 手动触发 DOM 事件。

前者是一种使用事件进行消息传递的方式。一个例子是创建一个EventEmitter

后者只是手动使用浏览器内置的 DOM 事件系统的一种方法。这基本上是使用原生存在于(有能力的/现代)浏览器中的DOM 3 Event API 。

所以问题只是你想做什么?触发 DOM 事件还是使用事件进行消息传递?

基准显示 DOM 3 自定义事件慢了 98%

DOM 似乎有巨大的开销。这样做是因为它支持事件传播和冒泡。这样做是因为它支持将事件绑定到 DOMElement。

如果您不需要 DOM3 事件的任何功能,那么请使用所选的发布/订阅库。

[编辑2]

这就是关于错误处理的全部内容,如何进行错误处理取决于您。如果您知道您的事件发射器是同步的,那么这就是预期的行为。要么进行自己的错误处理,要么使用setTimeout它使其异步。

请注意,如果您将其设为异步,您将“失去”事件处理程序在发出/触发/调度调用返回后完成其逻辑的保证。这需要完全不同的高级设计,然后假设事件发射器是同步的。这不是一个轻易做出的选择