最近在看jQuery的源码,查了一些资料,偶尔看到了网易云课堂里有套视频是对源码进行讲解的,是叫妙味课堂出的,看着还不错,对这方面感兴趣的推荐看下,

个人感觉很不错。所以发些文章,边学边记录。

版本:2.0.3

整体的架构:

(function(){

(21,94) 定义变量和函数,赋值JQuery

(96,283)添加JQuery的一些方法和属性

(285,347) extend JQ的继承方法

(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操作:添加 删除 获取 包装 筛选。

(6058,6620) css():样式操作(包括处理浏览器的兼容)

(6621,7854) 提交数据的ajax() load() getJson()

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

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

(8804,8821) Jq支持模块化的支持

(8826) window.JQuery=window.$=JQuery;

})();

JQuery的源码中,所有代码是被包含在一个自执行的方法中的:

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

至于为什么需要传入window对象,而不是在内部方法中直接使用,是因为有两原因:

1:为了便于压缩 2:当方法内部使用的时候,查找的速度快。

使用undefined这个参数是为了防止在方法外部将undefined赋值,例如:

var undefined=1

如果这样赋值,那undefined的值从此以后变为1,这回影响以后的判断。

对于JQuery的调用方式,属于链式调用,也就是说JQury().css()这种方式调用,

那这种方式就区别于一般的对象操作,先new出来一个对象,然后再调用原型链上的方法。

这是因为JQuery调用时,返回的是当前的对象。

例如:

function jQuery(){return new jQuery.prototype.init();
}
jQuery.prototype.init=function(){  //初始化代码
}
jQuery.prototype.css=function(){
}
jQuery.prototy.init.prototy=jQuery.prototype;
jQuery().css();

这样调用时,就不比单独调用jQuery的init方法了,直接使用jQuery()的方法时,自动就会执行初始化方法,并返回。

这样返回的是:

jQuery.prototype.init

这个对象,这个对象上的原型并没有jQuery原型上的属性和方法,所以要执行

jQuery.prototy.init.prototy=jQuery.prototype;

把init方法的原型,指向jQuery对象的原型。这样就实现了这种调用方式。

转载于:https://www.cnblogs.com/y8932809/p/5832317.html

JQuery源码解析-整体架构的设计相关推荐

  1. jQuery源码解析(架构与依赖模块)

    jQuery设计理念 引用百科的介绍: jQuery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1. ...

  2. jQuery源码解析(架构与依赖模块)第一章 理解架构

    1-1 jQuery设计理念 引用百科的介绍: jQuery是继prototype之后又一个优秀的Javascript框架.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, F ...

  3. 【jQuery源码】整体架构

    jQuery源码可以精简为以下内容: 方框上面的代码根据Jq注释我们可以知道是对AMD规范的支持. jQuery整体上被包裹在一个匿名函数中,这个匿名函数再作为另一个匿名函数的参数被传入,形参fact ...

  4. JQuery 源码解析资料

    2019独角兽企业重金招聘Python工程师标准>>> jQuery源码分析系列目录 jQuery源码解读-理解架构 jQuery源码解析(架构与依赖模块) jQuery v1.10 ...

  5. 关于JQuery源码解析

    源码分析-----整体架构 1.首先关于jQuery的闭包结构 (function(window,undefined){//jquery代码jquery=function(selector,conte ...

  6. jquery源码解析:代码结构分析

    本系列是针对jquery2.0.3版本进行的讲解.此版本不支持IE8及以下版本. (function(){ (21, 94)     定义了一些变量和函数,   jQuery = function() ...

  7. jQuery 源码解析一:jQuery 类库整体架构设计解析

    如果是做 web 的话,相信都要对 Dom 进行增删查改,那大家都或多或少接触到过 jQuery 类库,其最大特色就是强大的选择器,让开发者脱离原生 JS 一大堆 getElementById.get ...

  8. 【深入浅出jQuery】源码浅析--整体架构(转)

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. 学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理

    前言 这是学习源码整体架构系列第七篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.本篇文章学习的是实际仓库的代码. 学习源码整体 ...

最新文章

  1. 【学习笔记】C#中HashTable和快速排序的用法,从单词频率统计小程序写起
  2. 反射获取成员方法并使用【应用】
  3. python getmenu不到菜单句柄,从弹出菜单win32 api Python中选择项目
  4. 程序员是一盏省油的灯
  5. Web开发入门疑问收集(不定期更新)
  6. debug error怎么解决_我要以血和泪的经历告诉你,这个 bug 太难解决了
  7. 移动端之flexible.js
  8. 学习MySQL:使用SELECT语句从MySQL服务器查询数据
  9. cocos2dx骨骼动画Armature源码分析(一)
  10. zabbix详解(十)——zabbix YUM安装实战
  11. spring mvc 上传文件
  12. 网站html导出excel插件,使用JQuery插件将HTML的table标签数据导出成excel
  13. 360极速浏览器兼容模式怎么设置在哪
  14. instagram怎么用_用PHP和Instagram API征服Instagram
  15. flash 在谷歌 不能使用
  16. python实现pdf阅读器_PyQt5 从零开始制作 PDF 阅读器(一)
  17. 废话文学顶流之文章生成器
  18. 云服务器复现PointRCNN代码踩坑总结
  19. 怎么用matlab画误差椭圆,基于MATLAB的导线网平差软件设计及误差椭圆的绘制.docx...
  20. 西游记中天庭与西天的关系

热门文章

  1. Spring笔记——2.使用Spring容器
  2. 由于使用zen coding导致myeclipse6.5中使用Alt+/不自动提示的解决办法
  3. Windows Server 2003 简介
  4. android考勤系统,Android端实现考勤管理系统
  5. Hadoop多用户作业调度器和安全机制的自我总结
  6. 配置文件占位符||Profile——1、多Profile文件 2、yml支持多文档块方式 3、激活指定profile
  7. 计算机组成原理——概述1
  8. JavaScript技术篇 - js的null值判断,js的undefined的判断,js的null与undefined的2种区分方法
  9. sdut 2139BFS
  10. 模拟退火求函数最值问题求解