最近在学习Jquery的最新的源码,Jquery-3.3.1版本。网上有很多对jquery解析的文章。但是我还是要自己去尝试着看一篇jquery的源码。本系列博客用来记录其中的过程,并同大家分享。本次学习Jquery源码是结合Jquery API来学习的。结合API来学习,首先会让我理解Jquery的整体结构,让我觉得Jquery源码是有迹可循。如果盲目的去看Jquery源码,10000多行的代码可能会让人望而生畏。

  Jquery API 很好地表达了Jquery的整体结构,可以很清楚知道Jquery由哪几部分组成。Jquery主要由核心方法、选择器、Ajax、属性、CSS、文档处理、筛选、事件、效果、工具、事件对象、延迟对象和回调函数等组成。下面是Jquery的整体框架图。

  从上图,我们能直观明了的Jquery结构。我们先看Jquery的声明方法。

闭包函数

  Jquery的所有对象都封装在闭包上。闭包的好处,我以前写关相关的博客。闭包的一大特点是,所有声明的变量、方法都是在函数内部使用,与全局变量没有冲突。

(function(global,factory){

			})(window,function(){

			});

  Jquery所有的实现都是被封装在一个立即执行的匿名函数里。这个函数有两个参数一个参数是window对象,另一个参数就是一个函数,用来声明jquery的方法以及属性,这个函数是主体。

(function(global,factory){
if(typeof module ==="object" && typeof module.exports==="object"){
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
}
else{
factory(g);
}
})(this,function(g,t){ });

  上面的代码,主要是用来进行模块化处理,让jquery可以适用在CommonJS规范下的代码。

Jquery使用

  在使用Jquery的时候,可以通过JQuery或者$直接调用Jquery提供的方法,并不需要去实例化Jq对象。Jquery是个立即执行的闭包函数,它把Jquery和$暴露出来给使用。

window.jQuery = window.$ = jQuery; 通过这样的方法,将Jquery对象赋值给window对象,window对象是个全局对象。对于面向对象语言,我们在使用类的时候,很多时候都通过new关键字来实例化类的对象。JavaScript中没有类的概念,但是在JavaScript中也可以通过函数来创建对象。Jquery并不需要new关键字来实例化。

jQuery = function( selector, context ) {

        // The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init( selector, context );
},

  Jquery是通过这样来声明的,也就是说Jquery已经是一个实例化的对象了,所以我们可以直接使用Jquery对象。我们来看Jquery.fn.init函数时怎么声明的。Jquery声明的完整代码如下。

jQuery=function(selector,context){
return new jQuery.fn.init(selector,context);
};
jQuery.fn = jQuery.prototype = { }
jQuery.fn.init = function( selector, context, root ){ }

  首先声明了Jquery函数,同时为Jquery声明了原型对象。

  

$(function(){
$(".jqTest").text("Jquery");
var obj=$.extend(true, {"second":"Jquery"}, {first:"Hello"});
var j=obj.first+obj.second;
console.log(j);
})

  上面的代码简单的介绍了jquery的使用。$.extend,是jquery直接提供的静态方法,$()方式调用的是Jquery.fn中的方法。两种不同调用Jquery的方式。

Jquery源码分析-整体结构的更多相关文章

  1. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  2. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  3. jQuery源码分析系列(转载来源Aaron.)

    声明:非本文原创文章,转载来源原文链接Aaron. 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAa ...

  4. jQuery源码分析系列——来自Aaron

    jQuery源码分析系列——来自Aaron 转载地址:http://www.cnblogs.com/aaronjs/p/3279314.html 版本截止到2013.8.24 jQuery官方发布最新 ...

  5. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  6. jQuery 源码分析 8: 回头看jQuery的构造器(jQuery.fn,jQury.prototype,jQuery.fn.init.prototype的分析)

    在第一篇jQuery源码分析中,简单分析了jQuery对象的构造过程,里面提到了jQuery.fn.jQuery.prototype.jQuery.fn.init.prototype的关系. 从代码中 ...

  7. jquery源码分析之一前言篇

    1.问:jquery源码分析的版本是什么? 答:v3.2.1 2.问:为什么要分析jquery源码? 答:javascript是一切js框架的基础,jquery.es6.vue.angular.rea ...

  8. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  9. jQuery源码分析系列(36) : Ajax - 类型转化器

    什么是类型转化器? jQuery支持不同格式的数据返回形式,比如dataType为 xml, json,jsonp,script, or html 但是浏览器的XMLHttpRequest对象对数据的 ...

随机推荐

  1. 实验五 burpsuite重放攻击实验

    一.实验目的 使用burpsuite软件实现重放攻击. 二.实验准备 1.笔记本电脑一台,安装vmware虚拟机和windows XP系统,下载安装burpsuite professional v1. ...

  2. 外星人(bzoj 2749)

    Description Input Output 输出test行,每行一个整数,表示答案. Sample Input 1 2 2 2 3 1 Sample Output 3 HINT Test< ...

  3. ajax操作提交整个表单内容

    1 2 3 4 5 6 7 8 9 10 11 12 13 $.ajax({                 cache: true,                 type: "POST ...

  4. [深入学习C#]C#实现多线程的方式:Task——任务

    简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能. 在后台使用ThreadPool. 任务表示应完成的某个单元的工作. 这个单元的工作可以在单 ...

  5. sql server2008 R2安装总结

    1,卸载注意 在卸载Microsoft SQL Server 2008 R2 安装程序(简体中文) 出现 :“警告 26003.无法卸载 Microsoft SQL Server 2008 R2 安装 ...

  6. What is pseudopolynomial time? How does it differ from polynomial time?

    To understand the difference between polynomial time and pseudopolynomial time, we need to start off ...

  7. LeetCode OJ--Gray Code **

    http://oj.leetcode.com/problems/gray-code/ 求格雷码的表示,主要应用递归. 递归生成码表 这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造: 1位格 ...

  8. 数据结构自己实现——queue

    SeqQueue.h #define QueueSize 100 typedef char DataType; class SeqQueue { public: DataType data[Queue ...

  9. HDU 4587 TWO NODES 枚举+割点

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4587 TWO NODES Time Limit: 24000/12000 MS (Java/Other ...

  10. for 、foreach 、iterator 三种遍历方式的比较

    习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = ...