我试图从jQuery的动画功能中了解我的能力,但最终遇到了各种我不理解的内部函数,并最终登陆了isWindow。 isWindow的代码检查对象是否具有属性setInterval
,否则返回false。
当然,任何对象都可以拥有属性setInterval
而不是窗口,虽然它几乎必须是故意破坏jQuery的功能才能拥有具有该属性名称的对象,但我可以想象一些合理的情况,它可能是无意的。
是否有更好的方法来检查对象是否是窗口对象?他们不能使用
的内容obj.setInterval && obj.setInterval.toString() == 'function setIternval(){ [native code] }
我知道内部函数toString
的返回并不是所有浏览器的标准,但是jQuery的编写者似乎对这些跨浏览器的差异有很好的理解。我也知道这也不是一个万无一失的方法,因为有人可以轻易地覆盖toString
方法来返回相同的字符串,但这仍然可以防止将对象误认为窗口的问题。
我不会问我是否认为isWindow
仅被jQuery用于内部对象,但它是isPlainObject
的一部分,.extend
中使用了{{1}},它可以是用于外部对象。
答案 0 :(得分:3)
怎么样:
function isWindow(obj) {
var toString = Object.prototype.toString.call(obj);
return toString == '[object global]' || toString == '[object Window]' || toString == '[object DOMWindow]';
}
似乎可以在Chrome,Firefox,Opera,IE和Safari(最新版本)中使用