为什么 Event 接口在 Javascript 中有一个构造函数,以及如何实现基于 DOM 的自定义事件?

Why does the Event interface have a constructor in Javascript and how to implement DOM based custom events?

提问人:Gaurav Dalvi 提问时间:8/21/2023 最后编辑:Heiko TheißenGaurav Dalvi 更新时间:8/21/2023 访问量:46

问:

我对 JavaScript 比较陌生,在尝试实现 DOM 操作的自定义事件时,我在 MDN Web Docs 中遇到了 Event 接口。引起我注意的是,它被定义为一个接口,但它似乎也有一个构造函数(new Event(...))。根据我的理解,其他编程语言中的接口通常没有构造函数,所以这个概念对我来说有点混乱。

有人可以澄清一下 JavaScript 中的接口(如 Event 接口)如何具有构造函数吗?在接口中使用构造函数的目的是什么,在处理自定义事件时应该如何利用它?

我的困惑源于这样一个事实,即 Event 被标记为一个接口,但它似乎有一个构造函数 (new Event(...)),它看起来更类似于一个类。我对其他编程语言接口的理解使我认为它们主要定义方法签名,而不是构造函数。

这是我想做的:使用最佳实践设计一个自定义事件。我应该扩展或实现 Event 接口,还是这是正确的方法?有人可以澄清一下事件接口是更接近于类还是传统意义上的接口?此外,我将不胜感激有关如何在遵守 JavaScript 约定的同时继续创建自定义事件的任何指导或示例。

JavaScript 事件 构造函数 接口 custom-events

评论

4赞 evolutionxbox 8/21/2023
我认为 mdn 意味着像 API 这样的接口。开发人员使用的东西。
2赞 VLAZ 8/21/2023
创建和触发事件

答:

1赞 Bergi 8/21/2023 #1

MDN 在抽象中使用术语“接口”,就像 IDL 一样

对象是具有标识的实体,它们是状态和行为的封装。接口是一个定义,它声明实现该接口的对象将公开的某些状态和行为。

这就是接口的类型 - 您也可以将其称为类型声明。事实上,Web IDL 使用这样的 s 来定义它的所有编程接口,然后将它们映射到不同编程语言的具体代码。根据编程语言的不同,可以实现为接口、类、类型、抽象类、模块或其他东西。特别是在 JavaScript 中,没有“接口”,因此根据 WebIDL ECMAScript 绑定,它变成了一个具有属性的全局函数对象。EventinterfaceEventEvent.prototype

此外,并不总是可建造的。回到 DOM 级别 2,没有 ,而是必须通过创建事件,这是相当丑陋的。Eventconstructordocument.createEvent(…).initEvent(…)