为什么文档有 getElementById 方法,即使它没有继承自 Element?

why document has getElementById method even though it doesnt inherit from Element?

根据 MDN 文档,Element interface 包含搜索 dom 节点的所有方法,如

MDN 还 states Document 直接继承自 Node。 不是 来自元素。

那么为什么 Document 包含所有这些 Element 方法(以及来自 ParentNode 接口的方法)? 是 MDN 没有更新规范还是我遗漏了什么?

Document.prototypeElement.prototype都有getElementsByTagName。一个不是从另一个继承的——它们是完全独立的函数(不直观):

console.log(
  Element.prototype.hasOwnProperty('getElementsByTagName'),
  Document.prototype.hasOwnProperty('getElementsByTagName'),
  Element.prototype.getElementsByTagName === Document.prototype.getElementsByTagName,
  Document.prototype.hasOwnProperty('getElementById'),
  Element.prototype.hasOwnProperty('getElementById'),
);

Element.prototype 没有 getElementById.

ParentNode 接口是一个抽象规范,而不是您可以在某处检查的实际Javascript 对象。 Element.prototypeDocument.prototype 都实现了它,但是它们通过将 ParentNode 方法直接放在它们的原型上来实现。 (ParentNode 与 Node 完全不同 一样)