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

2/10/2017来源:心得技巧人气:1164

(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;