jQuery源码整体结构(源码2.0.3)
拨开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)的更多相关文章
- 第二十五课:jQuery.event.trigger的源码解读
		
本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...
 - jquery 1.7.2源码解析(二)构造jquery对象
		
构造jquery对象 jQuery对象是一个类数组对象. 一)构造函数jQuery() 构造函数的7种用法: 1.jQuery(selector [, context ]) 传入字符串参数:检查该字符 ...
 - jquery $.proxy使用  Jquery实现ready()的源码
		
jquery $.proxy使用 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement') ...
 - 在网站开发中很有用的8个 jQuery 效果【附源码】
		
jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...
 - 分享一组很赞的 jQuery 特效【附源码下载】
		
作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些 ...
 - 14款让前端开发者心动的jQuery/CSS3插件及源码
		
14款让前端开发者心动的jQuery/CSS3插件及源码,一起来看看. 1.jQuery左右滚动banner代码! DEMO演示 / 源码下载 2.jQuery QQ表情插件qqFace ...
 - 基于jQuery经典扫雷游戏源码
		
分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <center> <h1>j ...
 - 保姆级教程——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版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
 - [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程
		
标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...
 - 修改和编译spring源码,构建jar(spring-context-4.0.2.RELEASE)
		
上周在定位问题时,发现Spring容器实例化Bean的时候抛出异常,为了查看更详细的信息,决定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationB ...
 
随机推荐
- 【问题】Win7 系统下 Firefox hostadmin插件无法修改Host
			
今天遇到一个奇葩问题:win 7系统,firefox hostAdmin插件无法修改Host了,提示“ write hosts file failed check permissions”,肯定是哪里 ...
 - mv、umask、chattr、lsattr命令
			
mv命令行,即move 将文件移动到目录下 对文件或目录重命名 umask chattr 设置文件或目录的隐藏属性 lsattr显示文件或目录的隐藏属性 ls mv 1.txt aa ls cd aa ...
 - Shell简介:什么是Shell,Shell命令的两种执行方式
			
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
 - JVM performance profiling (有待整理)
			
Agenda memory model 3 parts: heap, permgen (method area) , thread stack(pointer, local var) heap: yo ...
 - WPF ArrangeOverride与MeasureOverride
			
1.MeasureOverride 是FrameworkElement.MeasureOverride 方法 当重写在派生类中,单位是对于子元素所需要布局的大小并确定FrameworkElement ...
 - FragmentStatePagerAdapter.notifyDataSetChanged不刷新页面的解决的方法
			
公司做医疗产品的,显示操作用的是android.所以我就用上下两个部分大致是固定的,仅仅有中间会有6个页面的切换,当中会有两个用户的切换.即普通用户和管理员用户,图片能够大致展示一下 其他页面是同样的 ...
 - FASTDFS 5X安装
			
FASTDFS 5X安装 http://www.wingdevops.com/?p=603 流行的开源分布式文件系统有很多,FastDFS 是国人在mogileFS的基础上进行改进的key-value ...
 - Form 对象的集合
			
<html> <body id="myBody" class="myBody"> <form id="myForm&qu ...
 - (亲测)设置myeclipse打开默认工作空间
			
亲测一: 1.找到D:\MyEclipse 8.5\configuration\ config.ini 这个文件 2.找到这一行instance.area.default 3.将后面的地址替换为你想要 ...
 - angularjs ng-repeat checkbox
			
<div class="col-md-3" ng-repeat="user in title.UserList"> <p class=&quo ...