谁/什么决定如何写的内容object的console?
有时你会得到对象文字的可折叠表示,而有时它只是打印DOM结构。
鉴于此 HTML:
<div class="container">
<video src="low.mp4"></video>
<video src="high.mp4"></video>
<video src="mega.mp4"></video>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我们点击console(WebKit/Firebug):
> var firstVideo = document.querySelector('video')
Run Code Online (Sandbox Code Playgroud)
进而:
> firstVideo
Run Code Online (Sandbox Code Playgroud)
它返回:
<video src=?"low.mp4">?</video>?
Run Code Online (Sandbox Code Playgroud)
同时,假设我们有另一个对象,例如:
var guitar = { name:'Stratocaster', strings:6 }
Run Code Online (Sandbox Code Playgroud)
向控制台询问:
> guitar
Run Code Online (Sandbox Code Playgroud)
给我们:

我已经多次遇到这种行为,但通常会通过其他方式回避我的好奇心。现在有点痛苦,所以我正在研究更多。仅仅是因为所讨论的对象是一个DOM元素而检查员只是在帮助我们吗?
(我意识到我的例子有点奇怪(比较DOM对象和文字),但这是说明问题的最简单/最快的方法。)
使用上一个问题中的一些信息,我可以获得有关每个对象的更多信息:
video.constructor 返回:
HTMLVideoElementConstructor
Run Code Online (Sandbox Code Playgroud)
虽然:guitar.constructor返回:
function Object() {
[native code]
}
Run Code Online (Sandbox Code Playgroud)
为什么这有关系?
像这样的情况:
> firstVideo.parentElement
Run Code Online (Sandbox Code Playgroud)
当我必须单独firstVideo.parentElement.offsetHeight跟踪每个元素(即)时,我不能简单地查看此元素并检查其属性,这真是令人失望。
那么,我的理解上的差距在哪里——实际发生了什么?