我有一个可以传递选择器、对象或 jQuery 对象的函数。我想知道哪种方法将该参数转换为 jQuery 对象更有效?
通过以下示例,我是否会更好:
myFunction = function (obj) {
var $obj = (obj instanceof jQuery) ? obj : $(obj);
};
或者只是跳过条件并将参数放入 jQuery 中,如下所示:
myFunction = function (obj) {
var $obj = $(obj);
};
当您将 jQuery 对象放入 jQuery 包装器中时,它仍然是 jQuery 对象。所以我主要想知道这样做是否有成本,而不是在第一个示例中添加测试?
最佳答案
is there a cost to doing that instead of the added test in the first example?
是的,有成本——但不是很大。
从 source code 跟踪 jQuery
的执行,jQuery 将返回 new jQuery.fn.init(selector, context );
。
init
函数将检查以下内容:
- 选择器是否传递了一个
字符串
? ... - 选择器是否传递了
DOMElement
? ... - 选择器是否传递了
函数
? ... - 以上都不是?然后返回
jQuery.makeArray(selector, this );
反过来,makeArray
将创建一个新数组并合并给定对象的内容(在本例中是一个 jQuery 对象,被视为“类似数组”)。
最后,这个新数组将被返回。
由您决定上述步骤是否会对您的应用程序产生问题,但实际上,上述步骤并不意味着任何类型的性能问题 - 它应该执行得非常快。
关于javascript - 传递选择器或对象,将其转换为 jQuery 对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591700/