关于节点元素,HTMLElement,文档,HTMLDocument EventTarget

About Node,Element,HTMLElement,Document,HTMLDocument,EventTarget

本文关键字:HTMLElement 文档 HTMLDocument EventTarget 元素 于节点 节点      更新时间:2023-09-26

我不明白上面的名字到底代表什么。MDN将其称为interfaces。它们似乎既不是DOM nodes,因为属性如parentNodenodeType不应用,也不是javascript对象。

从另一方面来看,它们出现在DOM对象的原型链中:例如document-->HTMLDocument.prototype-->Document.prototype-->Node.prototype...那么,它们到底是什么?

最后,一些会让我发疯的东西。让我们以HTMLElement.prototype为例。那就是HTMLElement.prototype.hasOwnProperty('title')是正确的。然而HTMLElement.prototype.title返回Uncaught TypeError: Illegal invocation(…) Chrome Developer Tools!!这个悖论有什么合理的解释吗?

谢谢

它们是对象(即Object类型的成员)。更具体地说,是宿主对象(即由宿主环境提供)。

没有悖论。

例如,您可以在所有节点上访问它们的parentNode。该属性不是每个节点自己的属性,而是从Node.prototype继承的。属性Node.prototype.parentNode被定义为一个访问器属性(getter/setter)。

然后,当您执行类似document.body.parentNode的操作时,将以document.body作为this的值调用getter。然而,当您使用Node.prototype.parentNode时,getter接收Node.prototype作为this值,它不是一个节点。所以它抛出。

你也可以称它们为"接口",因为它们在W3C规范中被定义为IDL接口。例如,Node在DOM规范中定义。

接口,或原型声明。

要访问某物的属性,你需要一个实例。

在这个例子中,是一个HTMLElement的实例。然后可以查询HTMLElement.title.

请注意,在Javascript中,对象和接口实际上是函数,但并不总是被调用。