Javascript 关于节点、元素、HTMLElement、文档、HTMLDocument、事件目标

Javascript 关于节点、元素、HTMLElement、文档、HTMLDocument、事件目标,javascript,dom,Javascript,Dom,我不明白上面的名字到底代表什么。MDN将它们称为接口。它们似乎既不是DOM节点,因为不应用parentNode和nodeType等属性,也不是javascript对象 另一方面,它们出现在DOM对象的原型链中:例如document->HTMLDocument.prototype->document.prototype->Node.prototype。。。 那么,它们到底是什么 最后,一些会让我发疯的事情。让我们以HTMLElement.prototype为例。就是HtmleElement.pro

我不明白上面的名字到底代表什么。MDN将它们称为接口。它们似乎既不是DOM节点,因为不应用parentNode和nodeType等属性,也不是javascript对象

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

最后,一些会让我发疯的事情。让我们以HTMLElement.prototype为例。就是HtmleElement.prototype.hasOwnProperty'title'是真的。但是HtmleElement.prototype.title返回未捕获的TypeError:在Chrome开发者工具中非法调用!!这个悖论有什么合乎逻辑的解释吗


谢谢

接口或原型声明

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

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


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

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

这并不矛盾

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

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


您也可以将它们称为接口,因为它们在W3C规范中定义为。例如,节点是在中定义的。

您可以使用document.getElementsByTagNamebody[0]获取文档的body HTMLElement。