可以两次初始化jQuery对象吗?

时间:2012-12-12 12:45:39

标签: javascript jquery jquery-selectors

我有一个需要jQuery对象的函数,但是为了方便起见,我还想接受选择器字符串和元素。所以我正在做这样的事情:

test($('.something'));
test('.something');
test($('.something')[0]);

function test (param1) {
  //ensure jquery object
  if (!(param1 instanceof $)) {
    param1 = $(param1);
  }

  //do something with $param1
}

只是初始化jQuery对象会有什么问题,或者是否存在影响和性能问题?

function test (param1) {
  //ensure jquery object
  param1 = $(param1);

  //do something with $param1
}

2 个答案:

答案 0 :(得分:4)

他们两个都会奏效。但如果您正在寻找最佳选择,您应该选择第一个功能。 Check this out

<强>更新

Here it is the perf由OP进行更正以及我没有考虑过的额外测试。

答案 1 :(得分:2)

当您使用另一个jQuery元素实例化jQuery时,它将返回后者的浅表副本。在构造函数内部,在确定选择器不是字符串或DOM元素之后,jQuery.makeArray()被称为here。这反过来调用jQuery.merge() here来制作浅层副本。

这显然占用了宝贵的周期,特别是因为你期待一个jQuery对象作为你的论点。因此,首先使用instanceof来确定类型会更有意义。

还有多大意义?假设参数不是jQuery对象的可能性为20%,那么进行类型检查将产生 6x性能提升(基于Chrome)。

查看results