保存带有id的元素的变量在哪里存储?

Tra*_*s J 7 html javascript dom

此问题(可通过ID访问的元素)指出,如果元素具有id,则可以基于该id通过变量名访问它.它引起了我的兴趣,因为我在使用Visual Studio 2010进行开发时看到了这个变量.我出于好奇做了一些测试,结果发现它document.getElementById()仍然比使用变量名更快.所以,我开始尝试浏览窗口,确定它必须window["idName"]在调试中,并且console.log(window)无法找到变量实际存储的位置.

当一个元素在html中定义时,<div id="foo">它在带有变量的javascript中可用foo(我不打算使用它,这是不好的做法).存储的变量在哪里?

I H*_*azy 7

这是非标准行为.存储的位置(以及它)取决于实现.


Firefox 15在Linux上使用,我必须深入2个原型对象才能找到实际对象.我在这个StackOverflow页面上运行了这段代码,得到了一个true结果.

Object.getPrototypeOf(Object.getPrototypeOf(window)).hasOwnProperty("hlogo");
Run Code Online (Sandbox Code Playgroud)

在Linux上的Chrome中,它只有一个层次.

Object.getPrototypeOf(window).hasOwnProperty("hlogo");
Run Code Online (Sandbox Code Playgroud)

我真的很惊讶在Firefox中看到它,但由于Chrome遵循微软模式,我想Firefox一定觉得有必要效仿.


如果您不知道原型链的深度,可以运行循环,将不同的对象添加到数组中,或者只使用循环中的对象.

var protos = [],
    obj = window;

while (Object.getPrototypeOf(obj) !== null) {
    obj = Object.getPrototypeOf(obj);
    protos.push(obj);
}

alert("The object had " + protos.length + " prototype objects");
Run Code Online (Sandbox Code Playgroud)