拨开jQuery的面纱,最近了解了下jQuery源码整体框架。主要包括:

(1)  jQuery 核心模块

(2)  sizzle 选择器引擎

(3)  Deferred 异步队列

(4)  Support 浏览器测试

(5)  Data 数据缓存

(6)  queue 队列

(7)  event 事件处理

(8)  Dom 操作

(9)  CSS 操作

(10)Ajax实现

(11)动画效果

(12)位置

整个jQuery源码最外层是一个大的闭包:

(function(window, undefined){})(window);

它的实质就是将window参数传入一个匿名函数中执行,保证了在函数体内创建的变量不会影响到应用方的代码。其中参数undefined保证了函数体内的undefined是未被定义过的。

创建对象:

在函数体中创建了一个jQuery对象:

jQuery = function( selector, context ) {

      // The jQuery object is actually just the init constructor 'enhanced'

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

},

可以从代码中看到真正创建的对象是jQuery.fn.init对象,那为什么init对象和jQuery对象是一样的呢?

jQuery.fn = jQuery.prototype

jQuery.fn.init.prototype = jQuery.fn;

上面两行代码说明jQuery.fn是jQuery的原型,创建的init对象的原型继承了jQuery的原型,这样就保证了init对象就是我们需要的jQuery对象。为什么要这样创建一个对象呢?

完全可以新建一个函数来进行创建对象然后用jQuery函数进行调用,源码这样处理的优势在于可以充分利用javascript原型的特性来减少不必要的代码,让代码更加健全。

在源码的最后将函数内创建的jQuery对象赋给了window的全局变量,这样可以再外面进行直接的调用:

window.jQuery = window.$ = jQuery;

extend扩展:

在源码的各个功能模块中都会看到extend,在核心模块中进行了定义

jQuery.extend = jQuery.fn.extend = function() {};

其中jQuery.extend扩展的是静态方法,例如:ready(), trim(), each(), Ajax()等,这些可以用美元符号$直接调用,$.trim(). 而jQuery.fn.extend扩展的是对象方法,例如:$(‘#id’).data(); 在实例化一个对象后调用的方法。

jQuery源码整体结构(源码2.0.3)的更多相关文章

  1. 第二十五课:jQuery.event.trigger的源码解读

    本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...

  2. jquery 1.7.2源码解析(二)构造jquery对象

    构造jquery对象 jQuery对象是一个类数组对象. 一)构造函数jQuery() 构造函数的7种用法: 1.jQuery(selector [, context ]) 传入字符串参数:检查该字符 ...

  3. jquery $.proxy使用 Jquery实现ready()的源码

    jquery $.proxy使用   在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement') ...

  4. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  5. 分享一组很赞的 jQuery 特效【附源码下载】

    作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些  ...

  6. 14款让前端开发者心动的jQuery/CSS3插件及源码

    14款让前端开发者心动的jQuery/CSS3插件及源码,一起来看看. 1.jQuery左右滚动banner代码! DEMO演示    /    源码下载 2.jQuery QQ表情插件qqFace ...

  7. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center> <h1>j ...

  8. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  9. [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程

    标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...

  10. 修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)

    上周在定位问题时,发现Spring容器实例化Bean的时候抛出异常,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationB ...

随机推荐

  1. 关于yuv 的pack(紧缩格式)和planner(平面格式)格式 [转]

    关于yuv 格式 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而 ...

  2. Java设计模式之装饰模式趣谈

    本文由码农网 – 鲁阿皓原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 前情提要:http://blog.csdn.net/baidu_30889437/article/details/ ...

  3. PG数据库之间的导入导出

    本文将介绍如何对PG数据库进行导入.导出,主要利用的是PG自带的pg_dump.pg_dumpall.pg_restore.psql等命令,版本是9.4(不同版本的pg_dump \ pg_resto ...

  4. PTA 06-图2 Saving James Bond - Easy Version (25分)

    This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...

  5. 微信开发第3章 通过accesstoken获取用户分组

    上一章我们获取到了access_token,那么我们可以试着拿token获取用户粉丝分组,调用接口地址为: http请求方式: GET(请使用https协议) https://api.weixin.q ...

  6. java树状结构之二叉树

    参考:http://blog.csdn.net/zhangerqing/article/details/8822476 前面已经提到过树和二叉树的相关概念内容,下面主要来介绍下关于二叉树的创建,遍历, ...

  7. iOS UILabel:宽度固定,自动高度显示全部文字

    desclabel.width = self.view.width - (leftOffset*2); desclabel.lineBreakMode = NSLineBreakByWordWrapp ...

  8. 在VS Nuget命令行下进行EF数据库迁移

    找到项目中,用到数据库DLL的地方,然后选中该项目,打开Nuget命令行输入以下的命令: 其中cardId为迁移名称,自己取

  9. C#通过FTP账号上传、修改、删除文件 FTPClient

    下面类文件中,主要做的工作是:从ftp服务器上下载文件把本地文件替换.添加.或删除功能,在替换本地文件时会先备份一下本地的文件,若整个操作都完成了就会发出commit命令,表示全部替换成功.若中间操作 ...

  10. SQL Server 优化器+SQL 基础

    http://www.cnblogs.com/shanksgao/tag/%E4%BC%98%E5%8C%96%E5%99%A8/ http://www.cnblogs.com/double-K/ca ...