为什么文档有 getElementById 方法,即使它没有继承自 Element?
why document has getElementById method even though it doesnt inherit from Element?
根据 MDN 文档,Element interface 包含搜索 dom 节点的所有方法,如
- getElementById
- getElementsByTagName
- ...
MDN 还 states Document 直接继承自 Node。 不是 来自元素。
那么为什么 Document 包含所有这些 Element 方法(以及来自 ParentNode 接口的方法)?
是 MDN 没有更新规范还是我遗漏了什么?
Document.prototype
和Element.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.prototype
和 Document.prototype
都实现了它,但是它们通过将 ParentNode 方法直接放在它们的原型上来实现。 (ParentNode
与 Node 完全不同 一样)
根据 MDN 文档,Element interface 包含搜索 dom 节点的所有方法,如
- getElementById
- getElementsByTagName
- ...
MDN 还 states Document 直接继承自 Node。 不是 来自元素。
那么为什么 Document 包含所有这些 Element 方法(以及来自 ParentNode 接口的方法)? 是 MDN 没有更新规范还是我遗漏了什么?
Document.prototype
和Element.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.prototype
和 Document.prototype
都实现了它,但是它们通过将 ParentNode 方法直接放在它们的原型上来实现。 (ParentNode
与 Node 完全不同 一样)