7

这个问题(Element access with ID)指出,如果一个元素有一个 id,那么您可以通过基于该 id 的变量名来访问它。这让我很感兴趣,因为我在使用 Visual Studio 2010 开发时看到了这个变量可用。出于好奇,我做了一些测试,结果证明这document.getElementById()仍然比使用变量名更快。因此,我开始尝试通过窗口查看,认为它必须在window["idName"]、 在调试中,并且console.log(window)无法找到变量实际存储的位置。

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

4

1 回答 1

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");
于 2012-10-01T20:03:23.153 回答