6

在“Learning JavaScript Design Patterns”一书的第 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 字节检查了原始代码源以获得更快的 jQuery

var collection = jQuery([1]); // Fill with 1 item, to make sure length === 1

现在我明白了。我希望“学习 JavaScript 设计模式”一书的作者在引用此代码示例时也可以添加此评论。

4

2 回答 2

5

jQuery([1])只是将一个包含一个包含整数的条目的数组传递1给 jQuery,这将向包含所有 jQuery 原型方法的数组返回一个包装器。

它稍后将element参数变量分配到同一个数组中,然后返回整个 jQuery 实例。

从外观上看,整个函数只是将单个元素注入到一个重用的jQuery 对象中并返回它。

它被认为可以加快速度,当你在一秒钟内计算数百万次迭代时它实际上会这样做,但在我看来,这是一个明显的微优化案例,它可能会在长时间的调试中咬你的屁股。——完美杀戮

于 2013-07-17T12:37:12.907 回答
1

您正在将预定义的数组传递给 jQuery() 函数。让 [1] 表示“只有 1 个元素的新数组”

你也可以这样写——

var collection = jQuery(new Array(1)); // or even $(new Array(1));

我认为他们这样做的原因是对数组中有多少元素没有任何混淆。

于 2013-07-17T12:37:11.977 回答