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