2016-10-21 2 views
1

В нескольких местах MDN как here есть цитаты, какDOM интерфейсы: наследование по сравнению с реализацией

наследующий свойства от своего родителя, узла и орудия интерфейс ChildNode.

В чем разница между наследует и орудий здесь? Я запутался в интерфейсе реализации интерфейса. Что значит быть родительский интерфейс и реализованный интерфейс?

Я хотел бы нанести на карту дерево DOM, чтобы лучше понять, с какого интерфейса входит какое свойство в javascript.

ответ

3
document.doctype instanceof DocumentType // true 
document.doctype instanceof Node // true 
Object.getPrototypeOf(document.doctype) == DocumentType.prototype // true 
typeof document.doctype["remove"] // "function" 
document.doctype instanceof ChildNode // ReferenceError: ChildNode is not defined 

Как вы можете видеть, экземпляр доктайпа имеет метод, определенный ChildNode в спецификации, но поскольку Javascript не поддерживает множественное наследование, это не представимо через систему типа.

В других языках программирования множественное наследование или поддержка для микшинов в системе типов будет использоваться для кодирования отношения.

Цепь конкретных объектов прототипа выглядит следующим образом, по крайней мере в Firefox:

document.doctype -> 
    DocumentType.prototype -> 
    Node.prototype -> 
    EventTarget.prototype -> 
    Object.prototype -> 
    null 

ChildNode В методах, как представляется, вводит в DocumentType.prototype.

+0

So * реализует * здесь означает * «Все методы из ChildNode есть, но не по наследованию, а добавлены вручную». *? И до последней ошибки. Правильно ли я понимаю, что браузеры создают объект Node, который реализует интерфейс Node, а ChildNode - это просто интерфейс без соответствующего объекта? –

+0

Более или менее. Точный язык зависит от того, кого вы спрашиваете. спецификация DOM рассказывает о интерфейсах. Языки, реализующие DOM, имеют разные концепции наследования. Некоторые языки имеют множественное наследование для полных классов, одно единственное наследование + mixins или абстрактные интерфейсы. Javascript использует основанное на прототипе наследование (и ES6 вводит классы, построенные поверх этого). Таким образом, эти вещи будут выражаться по-разному в системах на языке C++ или Java, например. – the8472

+0

О 'Node', это функция-конструктор, соответствующая прототипу предка. Он в основном существует, поэтому «экземпляр» и другие вещи отражают работу. – the8472

Смежные вопросы