列出窗口对象的所有属性?

Gra*_*ham 9 javascript prototype properties window

我正在寻找(动态)获取浏览器当前知道的HTML元素列表,例如HTMLPreElement,HTMLSpanElement等等.这些对象是全局的,即

console.log('HTMLPreElement' in window);  //=> true
Run Code Online (Sandbox Code Playgroud)

所以我以为我可以getOwnPropertyNames像这样使用:

console.log(Object.getOwnPropertyNames(window));
Run Code Online (Sandbox Code Playgroud)

获取全局属性的完整列表(MDN声明它返回可枚举和不可枚举的属性).

使用上面的内容,我得到一个包含大约70个属性nanes的数组.但是,它不包括像HTMLPreElement- 仅限的对象HTMLElement.我也尝试过:

console.log(Object.getOwnPropertyNames(window.Window.prototype));
Run Code Online (Sandbox Code Playgroud)

它带回了一个更大的列表(包括addEventListener等)但是再次,没有HTMLPreElement.

那么,这些HTML{Tag}Element物体驻留在哪里?

Cho*_*pin 5

for (var prop in window)
    console.log(prop);
Run Code Online (Sandbox Code Playgroud)

那就是你需要的?


小智 5

在Firefox中,除非明确要求将其作为全局变量或属性,否则似乎未添加其全局对象就是元素的行为。也许Firefox会懒惰地将它们加载到环境中,以便除非真正需要它们,否则不会消耗内存。

看起来,当仅通过简单地请求全局对象的键时,它们不会出现,Object.getOwnPropertyNames 除非如上所述首先对其进行了明确的引用。

http://jsfiddle.net/mBAHm/