javascript - jQuery 源码 返回数组对象
高洛峰
高洛峰 2017-04-10 15:32:21
[JavaScript讨论组]

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

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

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

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

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
巴扎黑
javascriptjQuery = 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);
}
javascriptinit = jQuery.fn.init = function(selector, context) {}
javascriptinit.prototype = jQuery.fn

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

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

javascriptjQuery.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 很容易检查出来。它作为原型,提供了 eachmap 等方法。

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号