编写JavaScript函数 - 我应该将jQuery对象作为参数传递吗?

时间:2014-12-03 00:23:01

标签: javascript jquery

我很擅长表演和“最佳实践”的观点。我在我的JavaScript中使用了很多jQuery,并经常发现自己将jQuery对象作为参数传递给我正在编写的函数。传递选择器字符串而不是实际的jQuery对象作为参数更有效/更有效吗?这只是一种风格差异,还是有任何好的理由使用一种方法而不是另一种方法?

在参数中使用jQuery对象:

function updateSelectOptions(optionsData, $selectElement) {

    // function code

}

或者使用选择器字符串作为参数:

function updateSelectOptions(optionsData, selectorString) {

    var $selectElement = $(selectorString);
    // function code

}

4 个答案:

答案 0 :(得分:3)

你应该接受jQuery构造函数可以获得的任何灵活性。

重新包装jQuery集合并不会爆炸,所以我经常使用类似......

的东西
var fn = function(elems) {
    var $elems = $(elems);
};

这样,您可以接受jQuery集合,选择器字符串或对本机DOM元素的引用。

答案 1 :(得分:3)

如果你发现自己想要编写一个以jQuery对象为参数的函数,为什么不把你的函数作为jQuery插件呢?它非常简单,它使得函数适用于其余的jQuery代码。

而不是

function something(jq) {
   jq.css("color", "red");
});

你要写

$.fn.something = function something() {
  this.each(function() {
    $(this).css("color", "red");
  });
  return this;
};

现在,当你想要变成红色时,你可以说

$(".whatever").something();

jQuery插件中this的值是沿着链传递的jQuery对象。你不必用$(this)包裹它。除非你的函数能够返回某些值,否则返回传入的任何内容都是很好的,这样你就可以在虚线链的中间使用自己的插件。

答案 2 :(得分:1)

在我看来,传递对象很好,对性能会更好。

为什么?

大多数情况下,使用函数的原因是重用代码。因此,如果您传递字符串(选择器),例如updateSelectOptions(optionsData, selectorString) 每次调用该函数,然后使用该字符串选择元素:

var $selectElement = $(selectorString);

这将消耗更多内存,因为必须在每个函数调用中搜索该元素。

如果您传递缓存对象,则只会选择此元素并仅搜索一次。

答案 3 :(得分:0)

第二种方法在函数完成执行后删除对该对象的任何引用。第一个允许您保持对对象的引用以在函数范围之外操作它。