JavaScript MDN 中的接口

JavaScript interfaces in MDN

据我所知 JavaScript,基于原型的 OOP - 而不是 classes - 不考虑接口,而是依赖于 ducktyping。

不过,我经常可以在 MDN 在线文档中看到一些描述为“接口”的对象,例如此处的 Storage:

https://developer.mozilla.org/en-US/docs/Web/API/Storage

确实 window.Storage 存在并且是一个函数,但不是构造函数或工厂,如果调用会失败。它没有像该页面中描述的那样的成员,而是 window.localStorage。 本页

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

点window.Storage作为window.localStorage访问的对象。我知道 window.localStorage 是一个本地对象,但我想了解 window.Storage 的作用以及为什么它被 MDN 称为“接口”,在什么意义上:它是一个规范浏览器开发人员遵守,而不是基于 class 的范例中预期的严格“接口”?

提前谢谢你,很抱歉提出奇怪的问题。只是想加深我对 ES 的理解。

它不是带有可以实例化的构造函数的 class,因此我们不称它为 class。它也不是原型对象。

MDN 在通用 OOP 含义中使用术语 interface,它不限于基于 class 的继承,而是指具有方法签名的类型定义。

但是,它也使用术语 interface in the very specific context of the Web Interface definition language, which the web storage specification uses to define Storage as an interface indeed. These WebAPIs can be implemented in multiple languages (called "bindings"), though JS is most common. The WebIDL spec even defines how such an interface is to be represented in JavaScript(“ECMAScript 绑定”),特别是接口的线性继承是使用接口对象及其 .prototype 之间的原型继承实现的(基本上就好像使用 class Storage extends …)。这意味着 localStorage instanceof StorageStorage.prototype.hasOwnProperty('getItem') 按预期工作。