jquery语句"var collection = jQuery([1]);"的含义是什么?

6
"学习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设计模式》的作者在引用这段代码示例时也能添加这个注释。


我相信你正在将一个数组 [1] 传递给函数! - AllTooSir
1
请发布相关链接会更容易 - bipen
4
请点击这里 http://james.padolsey.com/javascript/76-bytes-for-faster-jquery/。 - Claudio Redi
这看起来像是jQuery的扩展。 - turnt
问题可能是:“拥有这样一个数组$([1])的意义是什么,而只有这个[1]呢?” - Brewal
它只返回一个函数,以华丽的方式在jQuery中包装元素。 - adeneo
2个回答

5

jQuery([1]) 简单地将包含整数 1 的一个元素数组传递给 jQuery,这将返回一个包含所有 jQuery 原型方法的数组包装器。

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

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

它被认为可以加快速度,实际上在每秒计算数百万次时确实如此,但在我看来,这是一个明显的微观优化,在长时间调试期间可能会让您很疲惫。- Perfection Kills


那个未使用的 o 参数有什么用处? - user2404501

1
你正在将一个预定义数组传递到jQuery()函数中。让 [1] 表示“只有一个元素的新数组”。
你也可以这样写 -
var collection = jQuery(new Array(1)); // or even $(new Array(1));

我认为他们这样做的原因是为了避免数组中元素数量的混淆。

只是一点提示:new Array(1)不等同于[1] - David Hellsing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接