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

问题描述 投票:8回答:2

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

最直观的方法似乎是通过object instanceof window.constructor进行检查的简单实例。令人沮丧的是,有些浏览器(例如IE6),其window.constructor等于undefined

您有什么建议?总是有像toString这样的骇人,丑陋和/\[object.*window.*\]/i.test(object)依赖的方法,但如果可能的话,我宁愿寻求一个简单,干净的解决方案。

javascript html dom javascript-objects
2个回答
6
投票

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

window.constructor

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


2
投票

您可以检查对象上是否存在DOM窗口界面所独有的合理良好支持的属性(例如jsFiddle showing this behaviour):

closed

您可以测试此方法function isWindow(obj) { return typeof obj.closed !== "undefined"; }

© www.soinside.com 2019 - 2024. All rights reserved.