2009-01-28 240 views

回答

20

取决于jQuery的内部工作,但我会用

obj instanceof jQuery 

这是最走 'JavaScript的方式'做到这一点。请记住,在窗口/框架边界之间传递对象时它会失败!

托默勒格的建议

'jquery' in obj 

还是应该在这种情况下工作,所以你如果你希望做的多窗口的数据交换应该使用它。我不会推荐它作为一个通用的解决方案,因为只是寻找一个名为'jquery'的属性不是很可靠。

如果obj是原语,in运算符也会抛出错误。如果这种行为是不需要的,你可以考虑使用这些测试,而不是一个:

obj && obj.jquery 
'jquery' in Object(obj) 

我找到第二个更具吸引力,但第一个将有可能更快。

检查

Object(obj).hasOwnProperty('jquery') 

会失败,因为jQuery的对象只能继承其原型属性。

我也打消了使用constructor属性在JavaScript类型检查 - 这可能可靠地工作jQuery的,但作为constructor只是对象的属性由构造函数的prototype属性在实例化时指出,有很多方法与测试等乱七八糟......


补充说明:

jQuery的本身检查obj && obj.jquery。它不会使用instanceof甚至一次。相反,它使用组合typeof,duck-typing和toString.call()进行类型检查,这应该在instanceof将失败的情况下运行。另外,hasOwnProperty()也不会被使用。我不确定这是什么说的关于jQuery库的代码质量;)

+1

比我的文章更详细:+1和我推荐你的文章被选为答案 – VonC 2009-01-28 11:36:28

6

下列之一:

obj instanceof jQuery 
obj && obj.constructor == jQuery 
obj && obj.jquery 

的instanceof is recommended

+0

what about:“jquery”in obj? – Tomalak 2009-01-28 08:59:10

+0

我建议不要使用instanceof,因为在IE中使用instanceof时[已知内存泄漏](http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak)。 – kflorence 2011-02-21 20:59:59

0

用这个而不是instanceof来测试jQuery对象。

/** 
* @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak 
* @return Boolean True if object is of type jQuery, false otherwise 
*/ 
function isjQuery(obj) { 
    return obj && obj.hasOwnProperty && obj instanceof jQuery; 
} 
相关问题