MDN 中的 JavaScript 接口(interface)

标签 javascript interface

据我所知 JavaScript,基于原型(prototype)而不是类的 OOP 不考虑接口(interface),而是依赖于鸭子类型。
然而,我经常可以在 MDN 在线文档中看到一些描述为“接口(interface)”的对象,例如此处的存储:
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 称为“接口(interface)”,在什么意义上:它是浏览器开发人员遵守的规范吗?而不是基于类的范式中的严格“接口(interface)”?
提前谢谢你,很抱歉这个奇怪的问题。只是想加深我对ES的理解。

最佳答案

它不是具有可以实例化的构造函数的类,因此我们不称它为类。它也不是原型(prototype)对象。
MDN 使用术语 interface在通用的 OOP 含义中,它不限于基于类的继承,而是指具有方法签名的类型定义。
但是,它也使用术语 interface在 Web 接口(interface)定义语言的非常具体的上下文中,Web 存储规范用于 define Storage as an interface 的确。这些 WebAPI 可以用多种语言实现(称为“绑定(bind)”),尽管 JS 是最常见的。 WebIDL 规范甚至定义了 how such an interface is to be represented in JavaScript (“ECMAScript 绑定(bind)”),特别是接口(interface)的线性继承是使用接口(interface)对象及其.prototype 之间的原型(prototype)继承来实现的。 s(基本上就像使用 class Storage extends … 一样)。这意味着 localStorage instanceof StorageStorage.prototype.hasOwnProperty('getItem')按预期工作。

关于MDN 中的 JavaScript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67050557/

相关文章:

javascript - AngularJS 进行 REST 调用并在浏览器中显示结果

javascript - 如何检测 Angular 中复制对象的更改?

javascript - Alexa Skill FeedHelper.js - 如何获取附件 URL?

typescript 警告 "Use an interface instead of a type literal"

delphi - 如何在接口(interface)中实现参数化方法以在 Spring 框架中使用

c# - 接口(interface)可以包含变量吗?

javascript - 有没有一种方法可以在组件上传播 Prop 而不覆盖指定的属性?

javascript - 如何使用ajax获取URL的页面标题

java - 在 Java 中定义具有相同名称但类型参数数量不同的通用接口(interface)

java - Joda-Time : DateTime, DateMidnight 和 LocalDate 使用