我无法理解上述名称究竟代表什么。 MDN将它们称为interfaces
。它们似乎都不是DOM nodes
,因为不应用 parentNode 和 nodeType 等属性,也不应用javascript对象。
另一方面,它们似乎是DOM对象的原型链:例如document-->HTMLDocument.prototype-->Document.prototype-->Node.prototype...
那么,究竟是什么?
最后,有些东西会让我发疯。我们来看 HTMLElement.prototype 。这是HTMLElement.prototype.hasOwnProperty('title')
是真的。但是HTMLElement.prototype.title
会在Chrome开发者工具中返回未捕获的TypeError:非法调用(...)!这个悖论有没有合理的解释?
谢谢
答案 0 :(得分:1)
它们是对象(即Object类型的成员)。更具体地说,是主机对象(即由主机环境提供)。
没有悖论。
例如,在所有节点上,您都可以访问其parentNode
。该属性不是每个节点的自有属性,而是从Node.prototype
继承而来。属性Node.prototype.parentNode
被定义为访问者属性(getter / setter)。
然后,当您执行document.body.parentNode
之类的操作时,将使用document.body
作为this
值调用getter。但是,当您使用Node.prototype.parentNode
时,getter会收到Node.prototype
作为this
值,而不是节点。所以它会抛出。
您也可以将它们称为"接口",因为它们在W3C规范中定义为IDL interfaces。例如,Node
中定义了#menu-primary-menu{position:relative;} /*--Added--*/
#menu-primary-menu ul {
width: 200px;
background-color: red;
position: absolute;
/*---margin-top: 0;---- Removed*/
top:0; /*--Added--*/
left: 250px;
}
。
答案 1 :(得分:0)
接口或原型声明。
要访问某物的属性,您需要一个实例。
在这种情况下,是HTMLElement的一个实例。 然后你可以查询HTMLElement.title。
请注意,在Javascript中,对象和接口实际上是函数,但并不总是被调用。