编写JavaScript函数 - 我应该将jQuery对象作为参数传递吗?
Writing JavaScript Functions - Should I Pass jQuery Objects as arguments?
从性能和"最佳实践"的角度来看,我很好奇。我在 JavaScript 中使用了很多 jQuery,并且经常发现自己将 jQuery 对象作为参数传递到我正在编写的函数中。传递选择器字符串而不是实际的 jQuery 对象作为参数是否更有效/有效?这只是一种风格差异,还是有什么充分的理由使用一种方法而不是另一种方法?
在参数中使用 jQuery 对象:
function updateSelectOptions(optionsData, $selectElement) {
// function code
}
或者使用选择器字符串作为参数:
function updateSelectOptions(optionsData, selectorString) {
var $selectElement = $(selectorString);
// function code
}
你应该接受jQuery构造函数可以接受的任何内容,以获得最大的灵活性。
重新包装 jQuery 集合不会爆炸,所以我经常使用类似的东西......
var fn = function(elems) {
var $elems = $(elems);
};
这样,您就可以接受jQuery集合,选择器字符串或对本机DOM元素的引用。
如果你发现自己想要编写一个将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)
包裹它。除非你的函数是返回一些值的东西,否则最好返回传入的任何内容,这样你就可以在虚线链的中间使用自己的插件。
在我看来,传递对象很好,并且对性能更好。
为什么?
大多数时候,使用函数的原因是重用代码。因此,如果您传递字符串(选择器),例如 updateSelectOptions(optionsData, selectorString)
每次调用函数,然后使用该字符串选择元素时:
var $selectElement = $(selectorString);
这将消耗更多内存,因为每次函数调用都必须搜索该元素。
其中,如果传递缓存的对象,则只会选择和搜索此元素一次。
第二种方法在函数完成执行后删除对对象的任何引用。第一个允许您保留对对象的引用,以便在函数范围之外对其进行操作。
- 如何将javascript对象作为参数传递到c#web服务中
- 如何在angularjs中传递对象字段作为指令参数
- 将对象作为参数传递时的 Javascript 函数作用域
- 将对象作为参数传递后的未定义属性
- 什么时候需要在javascript中的函数中将对象作为参数传递
- 如何使用没有闪耀模板的角度流星将参数传递给辅助对象
- 如何将对象参数传递给事件处理程序
- 如何在ng重复中的ng单击中将对象作为参数传递?AngularJS
- 传递对象数组中的某些参数
- 将对象作为参数传递给指令
- JS 函数将对象作为输入,并返回一个对象,该对象对作为参数传递的对象执行操作
- 在 Javascript 中传递对象属性键,而不是其值作为参数
- 处理在 JavaScript 中作为参数传递的空对象
- 通过将参数传递给我们的构造函数来创建唯一的对象
- 使用 Function.prototype.bind.apply(Obj, args) 将参数传递给对象,只传递第一个元
- 作为参数传递到函数中的对象的引用是否会更改
- 如何判断传递给函数的参数是对象还是字符串
- jQuery - 基于作为函数参数传递的对象构建动态 if 语句
- 停止对作为函数参数传递到新列表的对象引用
- 通过if语句的函数参数传递对象属性