我很擅长表演和“最佳实践”的观点。我在我的JavaScript中使用了很多jQuery,并经常发现自己将jQuery对象作为参数传递给我正在编写的函数。传递选择器字符串而不是实际的jQuery对象作为参数更有效/更有效吗?这只是一种风格差异,还是有任何好的理由使用一种方法而不是另一种方法?
在参数中使用jQuery对象:
function updateSelectOptions(optionsData, $selectElement) {
// function code
}
或者使用选择器字符串作为参数:
function updateSelectOptions(optionsData, selectorString) {
var $selectElement = $(selectorString);
// function code
}
答案 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)
第二种方法在函数完成执行后删除对该对象的任何引用。第一个允许您保持对对象的引用以在函数范围之外操作它。