很多MDN页面将事物描述为“接口”-我惊讶于“接口”没有链接到更详细的页面;在MDN的Web API页面上,它仅被描述为“对象类型”。
接口描述了一个对象的“形状”(它具有哪些属性,这些属性包含什么类型的值等)。它本身不是一个对象 - 它是对实现该接口的特定对象看起来像什么的更抽象的描述。
例如,在HTML标准中,DragEvent接口被描述如下:
[Exposed=Window]
interface DragEvent : MouseEvent {
constructor(DOMString type, optional DragEventInit eventInitDict = {});
readonly attribute DataTransfer? dataTransfer;
};
dictionary DragEventInit : MouseEventInit {
DataTransfer? dataTransfer = null;
};
DragEvent
是MouseEvent
的一种类型(另一个接口)。它有一个构造函数,因此您可以在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'
};