JavaScript中的接口是什么?

8
很多MDN页面将事物描述为“接口”-我惊讶于“接口”没有链接到更详细的页面;在MDN的Web API页面上,它仅被描述为“对象类型”。

1
在计算机领域,接口是指两个或多个系统、设备、程序或组合体之间的交互面。这些交互面可以是硬件、软件、人类或它们的组合。 - Jared Smith
1个回答

16

接口描述了一个对象的“形状”(它具有哪些属性,这些属性包含什么类型的值等)。它本身不是一个对象 - 它是对实现该接口的特定对象看起来像什么的更抽象的描述。

例如,在HTML标准中,DragEvent接口被描述如下:

[Exposed=Window]
interface DragEvent : MouseEvent {
  constructor(DOMString type, optional DragEventInit eventInitDict = {});

  readonly attribute DataTransfer? dataTransfer;
};

dictionary DragEventInit : MouseEventInit {
  DataTransfer? dataTransfer = null;
};

DragEventMouseEvent的一种类型(另一个接口)。它有一个构造函数,因此您可以在window.DragEvent上调用new。调用构造函数时,使用以下参数:

  • type,是一个DOMString(基本上只是任何普通字符串)
  • 类型为DragEventInit(由文档定义)的可选参数,默认为空对象

DragEvent实例还具有dataTransfer属性


请注意,您链接到的“interface”定义并不完全是JavaScript的东西,而更多地是Web API的东西。在不在浏览器中的其他JavaScript实现中(例如,在Node中),接口可能意味着不同的东西(或根本没有意义)。

TypeScript是一种广泛使用的JavaScript静态类型检查器,具有非常类似的接口概念,用于描述特定对象的形状。例如:

// Define the shape of a Foo object
interface Foo {
  prop: string;
}

// Create an object that implements Foo
const someFoo: Foo = {
  prop: 'somevalue'
};

为什么你要从HTML解释?是在JavaScript中询问。 - vincent thorpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接