一、jQuery源码(1)------ 2020-04-05

2020-04-05  本文已影响0人  自己写了自己看

1、jQuery实现的原理:

(function (global, factory) {
    // 支持commonJS规范的走这里
    if (typeof module === "object" && typeof module.exports === "object") {
        
    } else { // 这里可以理解为浏览器环境
        factory(global);
    }
})(typeof window !== "undefined" ? window : this, function (window, noGlobal) {

    var version = "3.4.1",
        jQuery = function (selector, context) {
            return new jQuery.fn.init(selector, context);
        },

        /**
         * jQuery.prototype 是把jQuery当做构造函数使用
         * jQuery.fn 此时jQuery是一个对象
         * 把jQuery的原型赋给jQuery的fn属性
         */
        jQuery.fn = jQuery.prototype = {
        }

    // 把jQuery.fn.init这个函数赋值给init
    var init = jQuery.fn.init = function (selector, context, root) {};

    /**
     * 把jQuery.fn.init的原型指向了jQuery,所以,
     * jQuery.fn.init的实例调取的也是jQuery原型上的方法
     * 因此,jquery.fn.init的实例在功能上和jQuery是相同的,
     * 所以可以认为是jQuery的实例
     */
    init.prototype = jQuery.fn;

    if (!noGlobal) {
        window.jQuery = window.$ = jQuery;
    }
});

/**
 * 为什么创建jQuery实例时,不直接return new jQuery();
 * 因为会陷入死递归
 */
jQuery = function (selector, context) {
    return new jquery();
}
上一篇下一篇

猜你喜欢

热点阅读