在“学习JavaScript设计模式”一书的第109页上,有一个让我困惑的代码示例。
jQuery.single = (function( o ){
var collection = jQuery([1]); // <-- i want to ask this line
return function( element) {
// give collection the element
collection[0] = element;
// return the collection
return collection;
}
})();
该功能的使用是这样的:
$('div').on('click', function() {
var html = jQuery.single( this ).next().html();
console.log( html );
});
更新 谢谢回答。我查看了作者页面76 bytes for faster jQuery
中的原始代码源代码var collection = jQuery([1]); // Fill with 1 item, to make sure length === 1
现在我明白了。我希望“学习JavaScript设计模式”一书的作者在引用此代码示例时也可以添加此注释。
答案 0 :(得分:6)
jQuery([1])
只是将一个包含整数1
的条目的数组传递给jQuery,它将返回包含所有jQuery原型方法的数组的包装器。
稍后将element
参数变量分配到同一个数组中,然后返回整个jQuery实例。
从它的外观来看,整个函数只是将单个元素注入重用的 jQuery对象并返回它。
假设它可以加快速度,实际上当你计算数百万次迭代超过一秒钟时,但在我看来,这是一个明显的微优化案例,可以在长时间的调试时间内扼杀你。 - Perfection Kills 。
答案 1 :(得分:1)
您正在将预定义数组传递给jQuery()函数。 let [1]表示“只有1个元素的新数组”
你也可以像 -
那样写var collection = jQuery(new Array(1)); // or even $(new Array(1));
我认为他们这样做的原因是因为数组中有多少元素没有任何混淆。