jQuery技术内幕:深入解析jQuery架构设计与实现原理. 1.2 总体架构

1.2 总体架构

jQuery的模块可以分为3部分:入口模块、底层支持模块和功能模块,如图1-1所示,图中还展示了模块之间的主要依赖关系。

来看看图1-1中各个模块的功能和依赖关系。

在构造jQuery对象模块中,如果在调用构造函数jQuery()创建jQuery对象时传入了选择器表达式,则会调用选择器Sizzle遍历文档,查找与之匹配的DOM元素,并创建一个包含了这些DOM元素引用的jQuery对象。

选择器Sizzle是一款纯JavaScript实现的CSS选择器引擎,用于查找与选择器表达式匹配的元素集合。

工具方法模块提供了一些编程辅助方法,用于简化对jQuery对象、DOM元素、数组、对象、字符串等的操作,例如,jQuery.each()、.each()、jQuery.map()、.map()等,其他所有的模块都会用到工具方法模块。

浏览器功能测试模块提供了针对不同浏览器功能和bug的测试结果,其他模块则基于这些测试结果来解决浏览器之间的兼容性问题。

在底层支持模块中,回调函数列表模块用于增强对回调函数的管理,支持添加、移除、触发、锁定、禁用回调函数等功能;异步队列模块用于解耦异步任务和回调函数,它在回调函数列表的基础上为回调函数增加了状态,并提供了多个回调函数列表,支持传播任意同步或异步回调函数的成功或失败状态;数据缓存模块用于为DOM元素和JavaScript对象附加任意类型的数据;队列模块用于管理一组函数,支持函数的入队和出队操作,并确保函数按顺序执行,它基于数据缓存模块实现。

在功能模块中,事件系统提供了统一的事件绑定、响应、手动触发和移除机制,它并没有将事件直接绑定到DOM元素上,而是基于数据缓存模块来管理事件;Ajax模块允许从服务器上加载数据,而不用刷新页面,它基于异步队列模块来管理和触发回调函数;动画模块用于向网页中添加动画效果,它基于队列模块来管理和执行动画函数;属性操作模块用于对HTML属性和DOM属性进行读取、设置和移除操作;DOM遍历模块用于在DOM树中遍历父元素、子元素和兄弟元素;DOM操作模块用于插入、移除、复制和替换DOM元素;样式操作模块用于获取计算样式或设置内联样式;坐标模块用于读取或设置DOM元素的文档坐标;尺寸模块用于获取DOM元素的高度和宽度。

下面来看看jQuery源码(jquery-1.7.1.js)的总体结构,如代码清单1-1所示,其中展示了各个模块在源码中的位置。

代码清单1-1 jQuery源码(jquery-1.7.1.js)的总体结构

(function( window, undefined ) {

   // 构造jQuery对象

   var jQuery = (function() {

       var jQuery = function( selector, context ) {

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

           }

       return jQuery;

   })();

   // 工具方法 Utilities

   // 回调函数列表 Callbacks Object

   // 异步队列 Deferred Object

   // 浏览器功能测试 Support

   // 数据缓存 Data

   // 队列 Queue

   // 属性操作 Attributes

   // 事件系统 Events

   // 选择器 Sizzle

   // DOM 遍历 Traversing

   // DOM 操作 Manipulation

   // 样式操作 CSS(计算样式、内联样式)

   // 异步请求 Ajax

   // 动画 Effects

   // 坐标 Offset、尺寸 Dimensions

   window.jQuery = window.$ = jQuery;

})(window);

从代码清单1-1可以看出,jQuery的源码结构还是相当清晰和有条理的,并不像源码那般晦涩。

时间: 2024-10-07 11:47:33

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 1.2 总体架构的相关文章

jQuery技术内幕:深入解析jQuery架构设计与实现原理1

jQuery技术内幕:深入解析jQuery架构设计与实现原理 高 云 著 图书在版编目(CIP)数据 jQuery技术内幕:深入解析jQuery架构设计与实现原理 / 高云著. -北京:机械工业出版社,2013.11 ISBN 978-7-111-44082-6 I. j- II. 高- III. JAVA语言-程序设计 IV. TP312 中国版本图书馆CIP数据核字(2013)第221662号 版权所有·侵权必究 封底无防伪标均为盗版 本书法律顾问 北京市展达律师事务所     本书由阿里巴

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 导读

   本书由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jQuery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jQuery中的实现技巧和技术精髓,同时本书也对广大开发者如何通过阅读源代码来提升编码能力和软件架构能力提供了指导.     本书首先通过"总体架构"梳理了各个模块的分类.功能和依赖关系,让大家对jQuery的工作原理有大致的印象:进而通过"构造jQuery对象"章节分析了构造函数jQuery()的各种用法和内部构造过程:接

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.8 静态属性和方法

2.8 静态属性和方法 在构造jQuery对象模块中还定义了一些重要的静态属性和方法,它们是其他模块实现的基础.其整体源码结构如代码清单2-3所示. 代码清单2-3 静态属性和方法 388 jQuery.extend({ 389     noConflict: function( deep ) {}, 402     isReady: false, 406     readyWait: 1, 409     holdReady: function( hold ) {}, 418     read

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.2 总体结构

2.2 总体结构 构造jQuery对象模块的总体源码结构如代码清单2-1所示. 代码清单2-1 构造 jQuery 对象模块的总体源码结构  16 (function( window, undefined ) {         // 构造 jQuery 对象  22    var jQuery = (function() {  25       var jQuery = function( selector, context ) {  27              return new jQ

jQuery技术内幕:深入解析jQuery架构设计与实现原理2

第三部分 底层支持模块 第3章 选择器Sizzle 第4章 异步队列Deferred Object 第5章 数据缓存Data  第6章 队列Queue 第7章 浏览器功能测试Support 第3章 选择器Sizzle Sizzle是一款纯JavaScript实现的CSS选择器引擎,它具有以下特性: 完全独立,无库依赖. 相较于大多数常用选择器其性能非常有竞争力. 压缩和开启gzip后只有4?KB. 具有高扩展性和易于使用的API. 支持多种浏览器,如IE 6.0+.Firefox 3.0+.Ch

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.3 jQuery.fn.init( selector, context, rootjQuery )

2.3 jQuery.fn.init( selector, context, rootjQuery ) 2.3.1 12个分支 构造函数jQuery.fn.init()负责解析参数selector和context的类型,并执行相应的逻辑,最后返回jQuery.fn.init()的实例.参数selector和context共有12个有效分支,如表2-1所示. 表2-1 参数selector和context的12个分支          selector   context    示 例 1    

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 1.4 总结

1.4 总结           在本章的前半部分,对jQuery的总体架构进行了梳理,并对各个模块的分类.功能和主要依赖关系做了简要介绍.通过这些介绍,读者已经对jQuery的代码有了整体上的认识. 在后半部分,则以提问的方式对包裹jQuery代码的自调用匿名函数进行了分析,扫除了读者阅读jQuery源码的第一道障碍.

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.7 原型属性和方法

2.7 原型属性和方法 在构造jQuery对象模块时,除了2.3节和2.6节已经介绍和分析的jQuery.fn.init()和jQuery.fn.extend()外,还定义了一些其他的原型属性和方法,其整体源码结构如代码清单2-2所示. 代码清单2-2  原型属性和方法 97 jQuery.fn = jQuery.prototype = { 98     constructor: jQuery, 99     init: function( selector, context, rootjQue

jQuery技术内幕:深入解析jQuery架构设计与实现原理. 2.1 构造函数jQuery()

2.1 构造函数jQuery() 如果调用构造函数jQuery()时传入的参数不同,创建jQuery对象的逻辑也会随之不同.构造函数jQuery()有7种用法,如图2-1所示.   图2-1 构造函数jQuery() 下面分别介绍构造函数jQuery()的7种用法. 2.1.1 jQuery( selector [, context] ) 如果传入一个字符串参数,jQuery会检查这个字符串是选择器表达式还是HTML代码.如果是选择器表达式,则遍历文档,查找与之匹配的DOM元素,并创建一个包含了