开发者社区> 问答> 正文

jQuery 源码 返回数组对象

$();
能在控制器里面看到返回的是一个数组[];

在jQuery源码当中 jQuery.fn.init 对象中有如下代码

// HANDLE: $(""), $(null), $(undefined), $(false)
    if ( !selector ) {
        console.log(this)
        return this;
    }   

Query()是我模拟jQuery写的
我奇怪的是jQuery()返回的是一个像数组一样的[]
而我写的返回是一个Query.fn.init对象

所以想问下jQuery返回的[],是怎么样实现的

展开
收起
小旋风柴进 2016-03-26 11:26:03 1682 0
1 条回答
写回答
取消 提交回答
  • jQuery = function(selector, context) {
        // The jQuery object is actually just the init constructor 'enhanced'
        // Need init if jQuery is called (just allow error to be thrown if not included)
        return new jQuery.fn.init(selector, context);
    }
    init = jQuery.fn.init = function(selector, context) {}
    init.prototype = jQuery.fn

    看上面这三段代码,可以了解$(...)返回的是一个 jQuery.fn.init 对象,jQuery.fn.init 是一个构造函数,其原型就是 jQuery.fn。

    再看看 jQuery.fn 的定义(精简代码)

    jQuery.fn = jQuery.prototype = {
        jquery: version,
        constructor: jQuery,
        // The default length of a jQuery object is 0
        length: 0,
    
        toArray: function() {},
        each: function(callback, args) {},
    
        map: function(callback) {},
    
        slice: function() {},
    
        // For internal use only.
        // Behaves like an Array's method, not like a jQuery method.
        push: push,
    };

    可以看到这是一个类似数组的对象,所以 $(...) 得到的是一个类数组对象,而不是真正的数组,用 Array.isArray 很容易检查出来。它作为原型,提供了 each 和 map 等方法。

    如果要把它变成真正的数组,需要调用其 toArray() 方法

    2019-07-17 19:15:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关课程

更多

相关电子书

更多
Javascript中的对象 立即下载
Javascript中的函数 立即下载
JavaScript函数 立即下载

相关实验场景

更多