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

时间:2012-04-29 17:51:33

标签: javascript properties window prototype

我希望(动态)获取浏览器当前知道的HTML元素列表,例如HTMLPreElementHTMLSpanElement等。这些对象是全局的,即

console.log('HTMLPreElement' in window);  //=> true

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

console.log(Object.getOwnPropertyNames(window));

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

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

console.log(Object.getOwnPropertyNames(window.Window.prototype));

会带回更大的列表(包括addEventListener等),但同样没有HTMLPreElement

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

3 个答案:

答案 0 :(得分:5)

for (var prop in window)
    console.log(prop);

这就是你需要的东西?

答案 1 :(得分:4)

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

当简单地通过Object.getOwnPropertyNames 请求全局对象的键时,它们似乎不显示,除非它们首先被如上所述显式引用。

http://jsfiddle.net/mBAHm/

答案 2 :(得分:1)

var obj = window;
while(obj){
    for(let prop of Reflect.ownKeys(obj)){
        console.log(prop);
    };
    obj = Object.getPrototypeOf(obj);
};