一种检查对象是否是window.constructor实例的简洁方法

时间:2011-06-03 15:39:28

标签: javascript html dom javascript-objects

标题几乎说明了一切。我需要检查一个对象是否是DOM的一个实例:Window接口。如果iframe存在,window也将通过测试,window.frames[xyz]

最直观的方式似乎是通过object instanceof window.constructor检查的简单实例。浏览器(如IE6),其window.constructor等于undefined,这是一种令人遗憾的事态。

你会建议什么?总是存在hacky,丑陋和toString依赖的方式,如/\[object.*window.*\]/i.test(object),但如果可能的话,我宁愿选择一个简单,干净的解决方案。

2 个答案:

答案 0 :(得分:5)

window对象具有异常属性window,它始终指向相同的window对象。任何其他对象都不可能非常复制此行为,因此您可以将其用作window.constructor测试的后备:

function isWindow(obj) {
    if (typeof(window.constructor) === 'undefined') {
        return obj instanceof window.constructor;
    } else {
        return obj.window === obj;
    }
}

jsFiddle showing this behaviour

答案 1 :(得分:2)

您可以检查对象上是否存在DOM窗口界面特有的合理支持的属性(例如closed):

function isWindow(obj)
{
    return typeof obj.closed !== "undefined";
}

您可以测试此方法here