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

原文 标签 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对象。因此,我主要想知道这样做是否要花费成本,而不是在第一个示例中进行额外的测试?

最佳答案

这样做会代替第一个示例中的添加测试吗?


是的,这是有代价的,但代价不菲。

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

init函数将检查以下内容:


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


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

最后,将返回此新数组。

您可以自行决定上述步骤是否会对您的应用程序造成问题,但实际上,上面没有步骤暗示任何性能问题-它应该执行得非常快。

关于javascript - 传递选择器或对象,将其转换为jQuery对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591700/

相关文章:

javascript - JavaScript导出RSA-OAEP公钥

javascript - Angular2错误:无法将类型“数字”分配给类型“NumberConstructor”

php - 通过FTP服务器上的PHP检查文件大小是否找到没有扩展名的文件?

performance - 高流量网站

c - 加速2D矩阵读取

javascript - 如何从 Controller 保留html中的变量?

javascript - Ajax 没有回答我的真实情况

jQuery同步操作

javascript - 验证视频时间戳

algorithm - 从一组点中找到最大矩形的高效算法