真的有两个问题......
首先,当编写带有对象参数的jQuery函数时,哪个是更好的编码风格,该函数是应该使用jQuery对象还是更好地传递标准JavaScript对象并让函数本身进行包装?我想我只是在问这里是否有标准,因为对于想要调用该函数的人来说,这可能并不总是显而易见。
其次,如何测试对象是否是jQuery对象?理想情况下,如果函数可以采用其中任何一个会很好,所以......
function(obj) {
var $obj;
if (isJQuery(obj)) {
$obj = obj;
}
else {
$obj = $(obj);
}
// ....
}
或者你甚至需要这样做吗?如果对象已经是一个jQuery对象,那么$(obj)
会简单地返回,所以你总是可以尝试换行,这无关紧要吗?
答案 0 :(得分:8)
您可以测试.jquery
property(在jQuery对象的原型上),如下所示:
function(obj) {
var $obj = obj.jquery ? obj : $(obj);
}
这就是jQuery core does internally as well。
更新: My ticket filed as a result of this question已完成,您现在可以找到the .jquery
property in the official API documentation。
编辑:,因为@ T.J.在评论中指出此目前不是 the official API,it's been around since jQuery 1.0并且我很确定它不会去任何地方。所有相同的评论讨论(感谢TJ),我提交了一个增强票据,希望将其添加到API文档中,您可以跟踪它的进度在这里:http://bugs.jquery.com/ticket/7200
答案 1 :(得分:4)
我会按照这些思路思考:
if (obj instanceof jQuery) {
$obj = obj;
}
else {
$obj = $(obj);
}
如果对象已经是jQuery对象,将
$(obj)
简单地返回,所以你总是可以尝试换行并且它无关紧要?
好吧,它会返回您传递的jQuery对象的 clone (请参阅documentation)。这可能会导致意外行为。