Javascript 检查对象是否为window.constructor实例的干净方法

Javascript 检查对象是否为window.constructor实例的干净方法,javascript,html,dom,javascript-objects,Javascript,Html,Dom,Javascript Objects,标题几乎说明了一切。我需要检查对象是否是DOM:Window接口的实例窗口也将通过测试,window.frames[xyz] 最直观的方法似乎是通过对象instanceof window.constructor进行简单的instanceof检查。有些浏览器(如IE6)的window.constructor等于undefined,这是一种令人悲哀的情况 你有什么建议?总有一些骇客的、丑陋的和依赖于的方法,比如/\[object.*window.*\]/i.test(object),但如果可能的话,

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

最直观的方法似乎是通过
对象instanceof window.constructor
进行简单的instanceof检查。有些浏览器(如IE6)的
window.constructor
等于
undefined
,这是一种令人悲哀的情况


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

window
对象具有不同寻常的属性,它总是指向相同的
window
对象。任何其他对象都不太可能复制此行为,因此您可以将其用作
窗口的回退。构造函数
测试:

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

Nice,它确实适用于我可以使用的所有浏览器(IE 7+、Firefox、Chrome)。我发现另一个不一致性:
window.open()instanceof window.constructor
等于
false
。似乎不同DOM实例的DOM:Window接口不共享同一个指针,这确实很不幸
obj.window===obj
相当可靠,但我期待着为那些支持它的浏览器提供一种好的、标准化的方式。我尝试使用非标准化的、但得到广泛支持的
函数.prototype.name
属性:
window.constructor?(obj instanceof window.constructor |(obj.constructor函数实例和&obj.constructor.name?obj.constructor.name==window.constructor.name:obj.window==obj)):obj.window===obj
为什么如果
window.constructor
未定义的
,函数会检查对象是否是它的实例?不应该
===
!==
?@GustvandeWal是的,应该。修复了。您可以找到一个关于如何在javascript中检测对象以及使用每个tec时出现的问题的好解释值得一读的技术…
http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in-javascript