我正在编写一个javascript函数,并且在"紧凑"的javascript设计方式中,参数的类型/长度会改变函数的行为.一个可能的参数类型是一个jQuery对象,我想要非常特殊的逻辑.
测试对象是否是jQuery实例的最佳方法是什么?
取决于jQuery的内部工作原理,但我会选择
obj instanceof jQuery
这是实现它的最"JavaScript方式".请记住,在窗口/框架边界之间传递对象时会失败!
托马拉克的建议
'jquery' in obj
在这种情况下应该仍然可以工作,所以如果你希望进行多窗口数据交换,你应该使用它.我不推荐它作为一般解决方案,因为只是寻找一个名为的属性'jquery'
不太可靠.
in
如果obj
是原语,运算符也会抛出错误.如果不希望出现此行为,您可以考虑使用以下测试之一:
obj && obj.jquery 'jquery' in Object(obj)
我发现第二个更吸引人,但第一个可能会更快.
检查
Object(obj).hasOwnProperty('jquery')
将失败,因为jQuery对象只从其原型继承属性.
我也不鼓励constructor
在JavaScript中使用该属性进行类型检查 - 它可能对jQuery可靠地工作,但由于constructor
构造函数prototype
在实例化时的属性所指向的对象的属性,有很多方法可以解决这个问题.测试...
作为旁注:
jQuery本身检查obj && obj.jquery
.它instanceof
甚至不使用一次.相反,它使用typeof
鸭子类型和toString.call()
类型检查的组合,它应该在instanceof
失败的地方工作.
此外,hasOwnProperty()
从来没有使用过.我不确定这说明jQuery库的代码质量;)
以下之一:
obj instanceof jQuery obj && obj.constructor == jQuery obj && obj.jquery
建议使用 instanceof