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

时间:2012-10-01 19:55:54

标签: javascript html dom

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

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

1 个答案:

答案 0 :(得分:7)

这是非标准行为。存储的位置(如果存储)取决于实现。


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

Object.getPrototypeOf(Object.getPrototypeOf(window)).hasOwnProperty("hlogo");

在Linux上的Chrome中,它只有一层。

Object.getPrototypeOf(window).hasOwnProperty("hlogo");

我真的很惊讶在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");