答案 0 :(得分:2)
Document
接口的WebIDL定义的那一部分指定它具有named property getter。它只与the section of the spec of the HTML spec that defines the supported property names for the Document
interface结合使用。
它们共同指定了一些作为Document
的命名属性公开的内容。
考虑以下文件:
<!doctype html>
<form name=foo></form>
<form name=bar></form>
<iframe name=bar></iframe>
<p id=baz>
如果您致电document.foo
,您将获得一个元素form name=foo
元素。
如果您致电document.bar
,您将收到包含form name=bar
元素和iframe name=bar
元素的集合。
如果你致电document.baz
,你会回来undefined
。
所有这种行为的原因是,section of the HTML spec defining the supported property names for the Document
interface指定可以将form[name]
值和iframe[name]
值作为Document
并且that spec section还表示如果Document
命名属性只匹配一个元素,则返回该元素,但如果它匹配多个元素,则返回一个集合。
document.baz
返回undefined
的原因是因为that spec section未将p[id]
值指定为Document
的命名属性。
但是,如果您改为window.baz
,将取回p id=baz
元素。
造成这种差异的原因是:虽然WebIDL definition for Window
指定它有named property getter(正如Document
WebIDL所做的那样),section defining the supported property names for Window
- 与类似的不同Document
- 的部分指定p[id]
值(任何元素的实际id
值)作为a的命名属性可访问Window
。