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(我不打算使用它,这是不好的做法).存储的变量在哪里?
这是非标准行为.存储的位置(以及它)取决于实现.
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)