javascript中接口和构造函数之间的区别是什么?

时间:2015-09-09 06:23:13

标签: javascript

我正在阅读this SO question about using EventTarget,并对此评论感到困惑

  

EventTarget只是一个接口,而不是构造函数。此外,您不能从本机DOM结构继承

我认为界面就是W3C所谓的javascript"类" 另外,如果我尝试从chrome dev工具控制台中的DOM Node函数中实例化一个新对象,

var myNode = new Node();

它返回错误

  

未捕获的TypeError:非法构造函数

我知道接口在经典OOP中是什么,但我的问题是构造函数和接口之间有什么区别,例如javascript中的NodeEventTarget

1 个答案:

答案 0 :(得分:4)

DOM接口是在JavaScript之外定义的,因为DOM可以用多种语言进行操作(曾经有一段时间VBScript和Tcl可以在JavaScript之外的浏览器中使用),这就是为什么W3C' DOM规范与语言无关,DOM本身并不与JavaScript有任何关系。

在跨平台/跨语言API中,接口使用IDL(接口描述语言)等语言定义,这里定义EventTarget的IDL(由Webkit使用):{{ 3}}

JavaScript本身没有接口概念(与C#/ Java interface相同的概念),因为它是原型语言,它使用Duck-typing代替静态类型的接口,

JavaScript"类"是ECMAScript 6中的一个新功能(JavaScript规范的下一个主要修订版基于),但是它可以被认为是语法糖,可以简化从同一个原型构造函数创建实例,它们也不同于这个接口概念。 / p>

总结:

API接口

语言界面

  • 是Java或C#中的interface,Microsoft Visual C ++中的__interface,Swift和ObjectiveC中的protocol的语言功能
  • JavaScript在其语言中没有概念,因为它是原型范式语言(因此使用Duck类型)
  • IDL对象通常可以在语言的interface功能中以1:1表示,假设语言支持