本系列是针对jquery2.0.3版本进行的讲解。此版本不支持IE8及以下版本。

(function(){

  (21, 94)      定义了一些变量和函数,   jQuery = function(){};

  (96,283)     给jQuery对象添加一些属性和方法(实例方法,通过$("div")这类的jQuery实例对象来调用)

  (285,347)    extend : jQuery的继承方法

  (349,817)    jQuery.extend():扩展一些工具方法(静态方法,直接通过$来调用的,比如:$.trim)

  (877,2856)  Sizzle:复杂选择器的实现。比如:$("ul li + p ");

  (2880,3042)  Callbacks:回调对象-》函数的统一管理。

  (3043,3183)  Deferred:延迟对象-》对异步的统一管理

  (3184,3295)  support:功能检测

  (3308,3652)  data(): 数据缓存

  (3653,3797)  queue():队列管理,dequeue.

  (3803,4299)  attr(),prop(),val(),addClass(),对元素属性的操作

  (4300,5128)  on(),trigger() 事件操作的相关方法

  (5140,6057)  DOM操作:添加,删除,获取(next),包装(wrap),Dom筛选

  (6058,6620)  css():样式的操作

  (6621,7854)  提交的数据和ajax的操作:load,ajax

  (7855,8584)  animate():运动的操作。 show,hide,fadeIn。

  (8585,8792)  offset(),位置和尺寸的一些方法

  (8804,8821)  jQuery支持模块化的模式

  (8826)             window.jQuery = window.$ = jQuery;

})()

(function(window,undefined){

  //window局部化,1.查找速度快。2.利于代码压缩,可以把window压缩成a。

  //undefined,有些浏览器的undefined可以被修改,为了防止undefined被修改,所以传了一个undefined给了jQuery

  core_strundefined = typeof undefined;

    //为了防止ie9以及以下版本,判定一个xmlNode方法为undefined时出问题。  

    //比如:a.b== undefined(a为xmlNode,并且在IE9以下浏览器下,b不存在a中,出问题);  typeof a.b== "undefined"(没问题)

  class2type = {};

     //类型判断,里面存的是{"[object String]":"string",....}。先去了解object.prototype.toString.call()

  core_version = "2.0.3";

  core_concat = [].concat;    //缓存数组方法以及对象方法。利于压缩。可以对core_concat压缩。

  ......

  var rootjQuery,

  _jQuery = window.jQuery,       //以防在引入jQuery库时,已经有其他库引用jQuery和$标示符了。

  _$ = window.$,         //因此先把他们保存起来。(prototype.js就引用了$标识)

  jQuery = function(selector, context){

    return new jQuery.fn.init(selector,context,rootjQuery);

  }

  ......

  window.jQuery = window.$ = jQuery;

})(window)

这里我要详细的讲下new jQuery.fn.init(selector,context,rootjQuery);我看了太多别人写的jQuery源码解析,大多写的不详细,导致刚开始看的时候,没看懂。

我们平常新建一个jQuery对象:$("div"),jQuery("div"),调用的就是new jQuery.fn.init(selector,context,rootjQuery);

很多人会有疑问,怎么new一个init,就是jQuery对象。除非init.prototype 就是jQuery.prototype。

大家可以在283行看到这样一句话:jQuery.fn.init.prototype = jQuery.fn;96行看到这样一句话:jQuery.fn = jQuery.prototype = {}

印证了上面的观点。jQuery.fn.init.prototype 就是jQuery.prototype。

当你们去看init方法的时候,会发现它返回的是this,this指的就是new出来的jQuery对象,而大家都知道,当访问一个实例对象的方法和属性时,如果实例对象没有,那么就去找原型对象,因此jQuery.prototype对象中的属性和方法,都可以通过new 出来的jQuery实例对象访问。也就是$("div")这种jQuery的实例对象可以调用各种在jQuery.prototype对象中的属性和方法。

而对于这种静态属性和方法,$.trim,jQuery.trim,是在构造函数的属性上定义的,跟实例对象没有什么关系。举个例子:function Person(){},Person.prototype={};

new Person()就是实例对象,它可以调用Person.prototype中的所有属性和方法。而Person.trim = function(){},就是静态方法,只能通过构造函数Person.trim才能进行调用。

有一个知识点,-webkit-margin-left   ->js访问时,会转化成webkitMarginLeft,而-ms-margin-left会转换成MsMarginLeft。

加油!

jquery源码解析:代码结构分析的更多相关文章

  1. JQuery源码解析(一)

    写在前面:本<JQuery源码解析>系列是基于一些前辈们的文章进行进一步的分析.细化.修改而写出来的,在这边感谢那些慷慨提供科普文档的技术大拿们. 要查阅JQ的源文件请下载开发版的JQ.j ...

  2. jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究

    终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...

  3. jquery 源码解析

    静态与实力方法共享设计 遍历方法 $(".a").each() //作为实例方法存在 $.each() //作为静态方法存在 Jquery源码 jQuery.prototype = ...

  4. 三.jQuery源码解析之jQuery的框架图

    这张图片是对jQuery源码截图,一点一点拼出来的. 现在根据这张图片来对jQuery框架做一些说明. 一.16~9404行可以发现,最外层是一个自调用函数.当jQuery初始化时,这个自调用函数包含 ...

  5. jquery源码解析:addClass,toggleClass,hasClass详解

    这一课,我们将继续讲解jQuery对元素属性操作的方法. 首先,我们先看一下这几个方法是如何使用的: $("#div1").addClass("box1 box2&quo ...

  6. jquery源码解析:jQuery数据缓存机制详解2

    上一课主要讲了jQuery中的缓存机制Data构造方法的源码解析,这一课主要讲jQuery是如何利用Data对象实现有关缓存机制的静态方法和实例方法的.我们接下来,来看这几个静态方法和实例方法的源码解 ...

  7. jquery源码解析:jQuery数据缓存机制详解1

    jQuery中有三种添加数据的方法,$().attr(),$().prop(),$().data().但是前面两种是用来在元素上添加属性值的,只适合少量的数据,比如:title,class,name等 ...

  8. jquery源码解析:jQuery工具方法when详解

    我们先来看when方法是如何使用的: var cb = $.when();   //when方法也是返回一个延迟对象,源码是return deferred.promise();返回的延迟对象不能修改状 ...

  9. jquery源码解析:jQuery工具方法Callbacks详解

    我们首先来讲下Callbacks是如何使用的:第一个例子 function a(){} function b(){} var cb = $.Callbacks(); cb.add(a); cb.add ...

随机推荐

  1. spring bean单例注入与用单例模式通过class.getinstance()区别?

    1.action的某个方法中,用以下代码获得redis单例实例 RedisDelegate redisDelegate = RedisDelegate.getInstance(); redisDele ...

  2. 【小前端】float属性

    要求 需要float的元素,必须指定一个width宽度 没了 然后就可以指定 float:right 什么的了

  3. Spring.net页面属性注入

    .条件spring.web程序集 1.1 system.web配置 <httpHandlers> <add verb="*" path="*.aspx& ...

  4. JSON Web Token(JWT)学习笔记

    1.JWT 的Token 标准的Token由三个部分并以.(点号)连接方式组成,即 header.payload.signature,如下 eyJhbGciOiJIUzI1NiIsInR5cCI6Ik ...

  5. myeclipse工程中library 和 web-inf下lib的区别

    eclipse工程下的library是用来编译里面的src中java文件的实际发布到tomcat时,仅仅只复制了WEB-INF/lib里面的jar包,所以出现eclipse可以正常编译但tomcat运 ...

  6. Perl 学习笔记-子程序

    1.定义子程序 使用sub关键字定义 ;   子程序名和标识符同要求, 但是有的特殊的可以用 &符号;  子程序是全局的, 不需要再使用前声明;  重名函数后者覆盖前者. sub roger{ ...

  7. javascript总结23:javascript 数据类型与变量

    1  基本类型和引用类型 JavaScript中的数据类型分为两类:基本类型和引用类型 基本类型:直接存储值,画图解释 Number.String.Boolean Undefined.Null 引用类 ...

  8. iOS基础教程:在建好的项目中加入CoreData[转]

    这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项目初期,没有包含进CoreData.于是就在已建好的项目中加入CoreData.由于第一 ...

  9. OpenNI depth深度数据的数据格式

    图像如何打开 如何查看它的数据格式并一个个读取 试一下ENVI等 可见,灰度图的Data只有一个值[0],而彩色图的Data却有三个值[142,119,113]. 这是用ENVI的Cursor Val ...

  10. struts2使用验证文件实现校验

    原创 struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中. 验证文件的命名规则 一般情况下,验证文件的命名规则是:Action类名-validation.xml. ...