JavaScript中的自定义事件与仅调用常规函数有何不同?

9 javascript dom-events

例如,我阅读了David Walsh的这篇文章:

https://davidwalsh.name/customevent

// Trigger it!
myElement.dispatchEvent(myEvent);
Run Code Online (Sandbox Code Playgroud)

正如作者在文章末尾总结的那样:

使用自定义数据创建和触发自定义事件非常有用。您不仅可以为事件创建自己的命名约定,而且还可以沿途传递自定义数据!

我的理解方式:

与从程序外部触发事件不同,就像上面的示例似乎在滚动页面时一样,上述示例似乎在做所有事情,而是在程序中的某个特定位置手动调用函数。

我可以看到,这可能是组织程序,设计模式的一种方式,但是我在这里还缺少其他东西吗?

Cod*_*kie 4

Javascript 中的自定义事件是观察者模式的实现,其中侦听器按事件名称分组。

引用自维基百科

观察者设计模式可以解决什么问题?

观察者模式解决了以下问题:

  • 应定义对象之间的一对多依赖关系,而不使对象紧密耦合。
  • 应该确保当一个对象改变状态时,不限数量的依赖对象会自动更新。
  • 一个对象应该可以通知数量不限的其他对象。

通过定义一个直接更新依赖对象状态的对象(主体)来定义对象之间的一对多依赖关系是不灵活的,因为它将主体与特定的依赖对象耦合在一起。紧密耦合的对象很难实现、更改、测试和重用,因为它们引用并了解(如何更新)具有不同接口的许多不同对象。

观察者设计模式描述了什么解决方案?

  • 定义主题和观察者对象。
  • 这样当主题改变状态时,所有注册的观察者都会收到通知并自动更新。

主体的唯一责任是维护观察者列表并通过调用 update() 操作来通知他们状态更改。观察者的职责是在主题上注册(和取消注册)自己(以获取状态更改的通知)并在收到通知时更新其状态(将其状态与主题的状态同步)。这使得主体和观察者松散耦合。主体和观察者彼此之间没有明确的了解。观察者可以在运行时独立添加和删除。这种通知注册交互也称为发布订阅。

虽然与自定义事件的松散耦合代码非常灵活,但如果以非结构化和过度的方式使用它们,流程很快就会变得不透明。