DOM 接口:继承与实现
DOM interfaces: inheritance vs. implementation
在 MDN 的多个地方,如 here 有引号,如
Inherits properties from its parent, Node, and implements the ChildNode interface.
这里的inherits和implements有什么区别?我对接口实现接口感到困惑。 父接口和实现接口是什么意思?
我想映射 DOM 树,以便更好地理解 javascript 中哪个接口来自哪个 属性。
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
如您所见,doctype 实例具有规范中 ChildNode
定义的方法,但由于 javascript 不支持多重继承,因此无法通过类型系统表达。
在其他编程语言中,类型系统中的多重继承或对混合的支持将用于编码关系。
具体原型对象链如下所示,至少在 firefox 中是这样:
document.doctype ->
DocumentType.prototype ->
Node.prototype ->
EventTarget.prototype ->
Object.prototype ->
null
ChildNode
方法似乎被注入到 DocumentType.prototype
。
在 MDN 的多个地方,如 here 有引号,如
Inherits properties from its parent, Node, and implements the ChildNode interface.
这里的inherits和implements有什么区别?我对接口实现接口感到困惑。 父接口和实现接口是什么意思?
我想映射 DOM 树,以便更好地理解 javascript 中哪个接口来自哪个 属性。
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
如您所见,doctype 实例具有规范中 ChildNode
定义的方法,但由于 javascript 不支持多重继承,因此无法通过类型系统表达。
在其他编程语言中,类型系统中的多重继承或对混合的支持将用于编码关系。
具体原型对象链如下所示,至少在 firefox 中是这样:
document.doctype ->
DocumentType.prototype ->
Node.prototype ->
EventTarget.prototype ->
Object.prototype ->
null
ChildNode
方法似乎被注入到 DocumentType.prototype
。