9

标题基本概括了所有内容。我需要检查一个对象是否是 DOM:Window 接口的实例。如果 iframe 存在,也window将通过测试。window.frames[xyz]

最直观的方法似乎是一个简单的 instanceof 检查 via object instanceof window.constructor。有浏览器(如 IE6),其window.constructor等于undefined.

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

4

1 回答 1

6

window对象具有不寻常的属性window,它总是指向同一个window对象。任何其他对象都不太可能复制此行为,因此您可以将其用作window.constructor测试的后备:

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

jsFiddle 显示此行为

于 2011-06-03T15:59:40.503 回答