write less,do more

jQuery告诉我们:牛逼的代码不仅精简而且高效!

2006年1月由美国人John Resig在纽约的barcamp发布了jQuery,吸引了来自世界各地众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的JavaScript框架,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

jQuery 版本:截止2013年6月的版本是2.0.3和1.10.2。其中,jQuery1.10.2支持兼容各个版本的浏览器,而jQuery2.0.3并不完全兼容IE 6、7、8,仅凭这份骨气,便高看它几分,因此在学习源码时毫不犹豫选择了jQuery2.0.3,同时也是在呼吁:让IE6尽早走向灭亡,最好是尸骨无存!

开篇

本系列文章的宗旨:学习jQuery源码,便应习其精华,为我所用!

jQuery源码中的精髓无外乎:初始化的设计思路;选择器的设计方法;事件处理的设计方法;动画效果的设计机制;Ajax封装的设计思路;插件机制的设计;兼容性处理的设计方法;等。针对源码中精髓部分将进行重点学习,其余部分源码或简述、或略去、或一句带过。

纵览

jQuery 2.0.3源码的整体框架中,源码共8829行,将其划分为下列各个部分,其中每一行的数字,如21,94是指源码中的21行到94行的内容。

(14) (function(window,undefined){:定义自执行的匿名函数,所有源码均包含在该匿名函数中

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

(96,283) jQuery.fn = jQuery.prototype={}:在jQuery对象原型中添加一些属性和方法

(285,347) jQuery.extend = jQuery.fn.extend : jQuery的继承方法,为添加后续代码提供良好的扩展性,同时扩展插件也是从该继承方法中扩展

(349,817) jQuery.extend() : 扩展一些工具方法(静态方法),如$.trim()、$.proxy()、等

(877,2856) Sizzle : 复杂选择器的实现,考虑了多种情况

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

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

(3184,3295) support : 浏览器的功能检测

(3308,3652) data() : 数据缓存,避免大数据量的元素挂载、预防内存泄露

(3653,3797) queue() : 队列方法,入队出队、执行顺序的管理

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

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

(5140,6057) DOM操作 : 添加、删除、获取、包装、DOM筛选等

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

(6621,7854) 序列化操作、数据提交和ajax方法:ajax()、load()、getJSON()等

(7855,8584) animate() : 运动(动画)的实现方法

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

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

(8826) window.jQuery = window.$ = jQuery:jQuery的符号简写为$

(8829) })(window):传入window参数

收尾

学习jQuery源码,其最终目的是要能够为我所用,即写出一套架构健壮、编码规范、运行稳定的属于自己的JS框架库,相信这个过程将使我们那拙劣的编码技术得到极大的提高,还有那满满的成就感,以及自我肯定。

因此,对于我们,这份执著,值得!

一起学习jQuery2.0.3源码—1.开篇的更多相关文章

  1. jQuery2.0.3源码分析系列(28) 元素大小

    最近的分析都是有点不温不火,基本都是基础的回顾了 今年博客的目标目前总的来说有2大块 JS版的设计模式,会用jQuery来诠释 JS版的数据结构,最近也一直在狠狠的学习中. HTML息息相关的的样式 ...

  2. jQuery2.0.3源码分析系列之(29) 窗口尺寸

    .height() .innerHeight() .innerWidth() .outerHeight() .outerWidth() .width() 基础回顾 一般的,在获取浏览器窗口的大小和位置 ...

  3. jQuery2.0.3源码

    概览 整体结构   (function (){ (21 , 94) 定义了一些变量和函数 jQuery=function(); (96 , 293) 给jQuery对象添加一些方法和属性; (285 ...

  4. 逐行分析jQuery2.0.3源码-完整笔记

    概览 (function (){ (21 , 94) 定义了一些变量和函数 jQuery=function(); (96 , 293) 给jQuery对象添加一些方法和属性; (285 , 347) ...

  5. jquery-2.0.3 源码分析 整体架构

    关键 var jQuery = function( selector, context ) { return new jQuery.fn.init(); } jQuery.fn = jQuery.pr ...

  6. [spring源码学习]二、IOC源码——配置文件读取

    一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...

  7. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

  8. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  9. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

随机推荐

  1. /usr/bin/ld.bfd.real: cannot find -lGL /usr/bin/ld.bfd.real: cannot find -lX11

    /usr/bin/ld.bfd.real: cannot find -lGL /usr/bin/ld.bfd.real: cannot find -lX11 根据网上大多数的说法,以及官网的介绍.截至 ...

  2. webform Repeater、地址栏传值、Response

    Repeater: 重复器 Repeater中有五个模板,这里需要注意的是4个 <HeaderTemplate> - 开头,只执行一次的内容 <ItemTemplate> - ...

  3. 【Centos】修改网卡名字&随之出现的问题

    自从学了工具tcpdump之后,里面会需要涉及到针对某个网卡抓包,因而会输入网卡名字,可是centOS7蛋疼的网卡默认命名实在是让人心碎,所以就想到了要修改网卡名字,步骤如下:(以下步骤涉及到我的错误 ...

  4. java调用sqlldr oracle 安装的bin目录

    package com.jyc.sqlldr; import java.io.BufferedReader;import java.io.InputStream;import java.io.Inpu ...

  5. LeetCode 104. Maximum Depth of Binary Tree

    Problem: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along ...

  6. BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...

  7. SOAPUI使用教程-REST请求工作

    双击一个REST请求在导航打开的REST请求编辑器窗口: 就像相应的SOAP请求编辑器,这个窗口有以下几部分组成: 工具栏在顶部有标准动作的和端口的下拉菜单轻松修改服务端口 请求编辑器左侧有相应编辑视 ...

  8. 面试题:给定数组a,找到最大的j-i, 使a[j]>a[i]

    第一种方法: 用两重循环对每对点都试一下,然后取最大值即可,时间复杂度为O(n2) #include <iostream> #include <algorithm> using ...

  9. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

  10. perl学习之路1

    一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...