拨开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. Lesson: Introduction to JAXP

    The Java API for XML Processing (JAXP) is for processing XML data using applications written in the ...

  2. Nginx具体的压缩配置

    以下是自学it网--中级班上课笔记 网址:www.zixue.it 常用以下配置 gzip on|off gzip_buffers 4K|8K 缓冲(和硬盘块相当) gzip_comp_level [ ...

  3. 使用GruntJS链接与压缩多个JavaScript文件

    使用GruntJS链接与压缩多个JavaScript文件 自己写了个简单的HTML5 Canvas的图表库,可以支持饼图,折线图,散点图,盒子图 柱状图,同时支持鼠标提示,绘制过程动画效果等.最终我想 ...

  4. 第一次JAVA基础考试后的反思

    今天进行了第一次JAVA基础考试,考查了课本上前面三章和方法的知识,基本没有涉及到数组.通过这次的考试,暴露了自己在学习中的很多问题. 机试题是编写一个学员状态转换器,主要运用的是选择语句和方法,而没 ...

  5. 抓取用户openid

    获取用户微信openid用户无感知情况下 传参为 appid appsecret 当前网址 session_name名称 <?php //获取微信的openid function get_wx_ ...

  6. Unicode与 utf8的互相转换

    <?php function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($nam ...

  7. jetty之安装,配置,部署,运行

    上篇文章中详解了关于什么是jetty,后续文章主要是介绍jetty的使用.本章介绍jetty环境的配置及部署war包. 1. 安装 1. 先下载一个jetty的压缩包,下载地址:http://www. ...

  8. java之Comparator与Comparable

    转自:http://blog.csdn.net/zhangerqing 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定 ...

  9. Hibernate查询之SQL查询

    转自: Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上.使用命名的SQL查询还可以将SQL语句放在配置文件中 ...

  10. REDIS 源码

    http://blog.csdn.net/chosen0ne https://github.com/chosen0ne/task-schedule-simulate