почему в документе есть метод getElementById, хотя он не наследуется от Element? - PullRequest
1 голос
/ 12 апреля 2020

Следуя документам MDN, интерфейс Element содержит все методы для поиска узлов dom, например

  • getElementById
  • getElementsByTagName
  • . ..

MDN также заявляет , что Document наследуется непосредственно от Node. НЕ от Element.

Так почему же Document содержит все эти методы Element (и методы из интерфейса ParentNode)? MDN просто не соответствует спецификациям или я что-то упустил?

1 Ответ

3 голосов
/ 12 апреля 2020

Оба 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)

...