MDN中的JavaScript接口

据我所知,JavaScript 是基于原型而不是类的 OOP 不考虑接口,而是依赖于鸭子类型。

然而,我经常可以在 MDN 在线文档中看到一些被描述为“接口”的对象,例如此处的存储:

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 将其称为“接口”,在什么意义上:它是浏览器开发人员遵守的规范,而不是基于类的范式中预期的严格“接口”?

在此先感谢您,对于奇怪的问题感到抱歉。只是想加深我对 ES 的理解。

回答

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

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

然而,它也在Web 界面定义语言的非常特定的上下文中使用术语接口,Web 存储规范使用它来定义Storage为一个interface。这些 WebAPI 可以用多种语言实现(称为“绑定”),但 JS 是最常见的。WebIDL 规范甚至定义了如何在 JavaScript 中表示这样的接口(“ECMAScript 绑定”),特别是接口的线性继承是使用接口对象及其.prototypes之间的原型继承来实现的(基本上就像使用class Storage extends …)。这意味着localStorage instanceof Storage并按Storage.prototype.hasOwnProperty('getItem')预期工作。


以上是MDN中的JavaScript接口的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>