我正在写一个JavaScript函数,并且在“compact”javascript设计方式中,参数的类型/长度会改变函数的行为。一个可能的参数类型是一个jQuery对象,为此我想要非常特殊的逻辑。什么是正确/正确的方式来测试一个对象是否是一个JavaScript中的jQuery对象?
测试对象是否为jQuery实例的最佳方法是什么?
我正在写一个JavaScript函数,并且在“compact”javascript设计方式中,参数的类型/长度会改变函数的行为。一个可能的参数类型是一个jQuery对象,为此我想要非常特殊的逻辑。什么是正确/正确的方式来测试一个对象是否是一个JavaScript中的jQuery对象?
测试对象是否为jQuery实例的最佳方法是什么?
取决于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库的代码质量;)
下列之一:
obj instanceof jQuery
obj && obj.constructor == jQuery
obj && obj.jquery
的instanceof is recommended
用这个而不是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;
}
比我的文章更详细:+1和我推荐你的文章被选为答案 – VonC 2009-01-28 11:36:28