传递选择器或对象,将它转换为jQuery对象的最佳方法是什么?

时间:2018-02-02 22:21:35

标签: javascript jquery performance

我有一个可以传递选择器,对象或jQuery对象的函数。我想知道哪种方法更有效地将该参数转换为jQuery对象?

通过以下示例,我最好使用:

myFunction = function (obj) {
  var $obj = (obj instanceof jQuery) ? obj : $(obj);
};

或者只是跳过条件并将参数放入jQuery中:

myFunction = function (obj) {
  var $obj = $(obj);
};

当你将jQuery对象放入jQuery包装器时,它仍然是一个jQuery对象。所以我主要想知道在第一个例子中是否需要花费成本而不是增加测试?

1 个答案:

答案 0 :(得分:1)

  

在第一个示例中是否需要付费而不是添加测试?

是的,有成本 - 但不是很大。

source code跟踪jQuery的执行情况,jQuery将返回new jQuery.fn.init( selector, context );

init函数将检查以下内容:

  • 选择器是否通过string? ...
  • 选择器是否通过DOMElement? ...
  • 选择器是否通过Function? ...
  • 以上都不是?然后返回jQuery.makeArray( selector, this );

反过来,makeArray将创建一个新数组并合并给定对象的内容(在本例中是一个jQuery对象,被认为是"类似于数组")。

最后,将返回这个新数组。

由您来决定上述步骤是否会对您的应用程序造成问题,但实际上,上面没有任何步骤意味着任何类型的性能问题 - 它应该执行得非常严重快速。