繁体   English   中英

javascript中的接口和构造函数有什么区别?

[英]What's the difference between an interface and a constructor function in javascript?

我正在阅读这个关于使用 EventTarget 的问题,并且被这个评论弄糊涂了

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

我认为接口就是 W3C 所说的 javascript“类”。
此外,如果我尝试从 chrome 开发工具控制台中的 DOM Node函数实例化一个新对象,

var myNode = new Node();

它返回一个错误

未捕获的类型错误:非法构造函数

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

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

在跨平台/跨语言 API 中,接口是用 IDL(接口描述语言)这样的语言定义的,这里是定义EventTarget的 IDL(Webkit 使用的): https : //github.com/adobe/webkit/blob /master/Source/WebCore/dom/EventTarget.idl

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

JavaScript“类”是 ECMAScript 6 中的一个新特性(JavaScript 规范的下一个主要修订版),但是它可以被认为是一种语法糖,用于简化从相同原型构造函数创建实例的过程,它们也与此不同界面概念。

总之:

API接口

语言界面

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM