jquery源码----初步认识源码

来源:互联网 发布:双系统windows引导修复 编辑:程序博客网 时间:2024/06/15 03:35
(function(window,undefined){
    // 为什么要传入window这个形参:
    //     1.其实是为了方便压缩,如果形参是e,或者w,传入window的话可以在闭包内部用w或者e代替window进行压缩
    //     2.为了提升查找速度,传入不用去最底层去查找了
    // 为什么传入undefined:
    //     1.为了防止undefined被修改
    //     如果外部 undefined = 10 ; undefined 会被修改
    // 建议我们不要使用"use strict";
        rootjquery,  //文档根目录 rootjquery = jQuery(document);
        readyList,   //与DOM加载有关 后面会有解释

        core_strundefined = typeof undefined ,  //返回的是字符串"undefined"
    //  先来解释“undefined” 和 undefined 的区别 :
    //    如果是IE678下:如果是 xml对象的属性的时候,window.a == undefined ;这种情况是错误的,不兼容  
    //    只能用这个:typeof window.a == "undefined" ;

    location = window.location,
    document = window.document,
    docElem = document.documentElement,

    //如果发生jquery,$变量发生冲突,权限让渡的问题,后面会有仔细的讲解
    _jquery = window.jQuery,
    _$ = window.$,

    //$.type()方法有关,讲$.type()的时候会详解
    //class2type = {'[Object String]' : 'string' , '[object Array]' : 'array'}
    class2type = {} ;

    //2.0.3版本前与数据存储有关,2.0.3以后不用了
    core_deletedIds = [],

    core_concat = core_deletedIds.concat,
    core_push = core_deletedIds.push,
    core_slice = core_deletedIds.slice,
    core_indexOf = core_deletedIds.indexOf,
    core_toString = core2type.toString,
    core_hasOwn = core2type.hasOwnProperty,
    core_trim = core_version.trim, //去前后空格

    //.............................jquery函数...........................................................................
    先来看我们用js写面向对象:
        1.写个构造函数:
            function Person(){

            }
        2.添加原型属性:
            先添加一个初始化方法:实现初始化
            Person.prototype.init = function(){

            };
            Person.prototype.css = function(){

            };
            var person = new Person();
            person.init();
            person.css();
    但是,jquery是这样写的:注意看Jquery的调用方式的不同:他不是通过new一个对象来调用的,而是:jquery().css();
        function jQuery(){
            return new jQuery.prototype.init();
        }
        //匹配数字:正负小数点科学计数法 会在css方法里面讲到
        core_pnum = /[+-]?(?:\d\.|)\d+(?:[eE][+-]?\d+|)/.source,
        //空格
        core_rnotwhite = /\s+/g,
        //匹配标签  和  id  的形式
        rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
        rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
        rmsPrefix = /^-ms-/,
        rdashAlpha = /-([\da-z])/gi,



        jQuery.prototype.init = function(){

        }
        jQuery.prototype.css = function(){

        }
         //也就是jQuery 和 jquery.prototype.init() 公用一个原型,那个由new jQuery.prototype.init()产生的对象的_proto_指针也指向这个原型对象,
       //这就解释了为啥jquery的有些方法new jQuery.prototype.init()new的对象也能用,因为公用一个原型对象
        jquery.prototype.init.prototype = jQuery.fn = jQuery.prototype;
1 0
原创粉丝点击