jQuery .isWindow方法?

时间:2012-03-06 00:38:45

标签: javascript jquery

我试图从jQuery的动画功能中了解我的能力,但最终遇到了各种我不理解的内部函数,并最终登陆了isWindow。 isWindow的代码检查对象是否具有属性setInterval,否则返回false。

当然,任何对象都可以拥有属性setInterval而不是窗口,虽然它几乎必须是故意破坏jQuery的功能才能拥有具有该属性名称的对象,但我可以想象一些合理的情况,它可能是无意的。

是否有更好的方法来检查对象是否是窗口对象?他们不能使用

的内容
obj.setInterval && obj.setInterval.toString() == 'function setIternval(){ [native code] }

我知道内部函数toString的返回并不是所有浏览器的标准,但是jQuery的编写者似乎对这些跨浏览器的差异有很好的理解。我也知道这也不是一个万无一失的方法,因为有人可以轻易地覆盖toString方法来返回相同的字符串,但这仍然可以防止将对象误认为窗口的问题。

我不会问我是否认为isWindow仅被jQuery用于内部对象,但它是isPlainObject的一部分,.extend中使用了{{1}},它可以是用于外部对象。

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(最新版本)中使用