gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:59:21 25 4
gpt4 key购买 nike

我正在阅读 this SO question about using EventTarget , 并被这条评论弄糊涂了

EventTarget is just an interface, not a constructor. Also, you cannot inherit from native DOM structures

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

var myNode = new Node();

返回错误

Uncaught TypeError: Illegal constructor

我知道经典 OOP 中的 in interface 是什么,但我的问题是构造函数和 javascript 中的 NodeEventTarget 等接口(interface)有什么区别?

最佳答案

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

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

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

JavaScript“类”是 ECMAScript 6(JavaScript 所基于的规范的下一个主要修订版)中的一项新功能,但是它可以被视为语法糖来简化从同一原型(prototype)构造函数创建实例,它们也是与此接口(interface)概念不同。

总结:

API接口(interface)

语言界面

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

关于javascript - javascript中的接口(interface)和构造函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com