jQuery框架总体分析
From:jQuery框架总体分析
jQuery的功能:
我们日常使用javascript干的最多的事情也就是
1.查找DOM节点
2.然后再对查找到的节点进行操作,例如修改样式 添加事件监听 修改内容等。
而jQuery框架的功能就是根据传递进来的参数赛选DOM节点,将DOM节点数组封装成jQuery对象.然后对这个 jQuery对象进行操作。
jQuery框架的总体架构:
- <span style="font-size: small;">(function (window,undefined){
- //jQuery的源码
- })(window)</span>
(function (window,undefined){//jQuery的源码 })(window)
可以看到这里使用了一个匿名函数将所有源码进行了封装,这样有以下几个好处:
1. 可以防止命名冲突 里面定义的变量不会给外面的矛盾。
2. 可以实现私有变量和私有方法,只将提供给外界的公共接口暴露出来。
jQuery对象的创建:
由上面的讲解可知所有的功能都是建立在jQuery对象的基础之上的所以我们首先来看一下这个对象的构建:
- var jQuery = function( selector, context ) {
- return new jQuery.fn.init( selector, context );
- },
var jQuery = function( selector, context ) {return new jQuery.fn.init( selector, context ); },
这里我们可以看到其实jQuery对象就是jQuery.fn.init对象,在init方法里面完成了jQuery对象的创建。这个方法的作用就是根据接受的字符串创建一个jQuery对象,其实这个对象就是一个DOM节点集合的数组。具体的实现后面会单独分析。
- //有定义了两个变量可以在多框架时使用
- _jQuery = window.jQuery,
- _$ = window.$,
- //将jQuery对象提供给外界使用
- window.jQuery = window.$ = jQuery
//有定义了两个变量可以在多框架时使用 _jQuery = window.jQuery, _$ = window.$, //将jQuery对象提供给外界使用 window.jQuery = window.$ = jQuery
jQuery对象的扩展机制:
创建了jQuery对象接下来就是要对对象进行方法扩展了。jQuery中有两种类型的方法,一种是jQuery的静态方法还有一种是类的实例方法。
- jQuery.fn.init.prototype = jQuery.fn;//这样我们要给jQuery扩展实例方法直接在jQuery.fn上面添加即可。
jQuery.fn.init.prototype = jQuery.fn;//这样我们要给jQuery扩展实例方法直接在jQuery.fn上面添加即可。
接着定义了extend方法: 用来扩展jQuery对象。
- jQuery.extend = jQuery.fn.extend = function(){
- /*
- 基本思路 使用for in循环遍历每一个属性进行拷贝。
- */
- }
jQuery.extend = jQuery.fn.extend = function(){/*基本思路 使用for in循环遍历每一个属性进行拷贝。*/ }
从上面的方法可以看出
jQuery.extend()是给类扩展静态方法
jQuery.fn.extend()是给类扩展实例方法
jQuery库的扩展:
上面这些准备工作都做完之后接着就是要对jQuery对象进行扩展了,对于jQuery的扩展可以分为以下几个模块:
核心模块 :
1. 对jQuery对象进行操作的一些方法,因为jQuery对象实际是一个数组所以就是添加了一些数组的常用方法。 例如: size() get() first() last() slice() map()等。
2. 缓存系统
用来给DOM节点上存贮数据的。方法有data() removeData()两个方法。具体实习实现参考后面的文章。
3. 队列系统
这几个方法主要用来实现动画模块,方法有queue() dequeue() clearQueue().
工具类模块 :
这部分主要提供了一些工具方法例如对字符串的处理,数组的处理,浏览器特性的一些测试等。
事件处理模块 :
jQuery对于事件的处理方式是: 创建了一个Event构造函数用来生成 事件对象 ,这个对象是在 W3C event对象基础上建立的,并且屏蔽了浏览器之间的差异。还定义了一个event对象 里面添加 了一些常用的对事件处理的方法 例如事件绑定 解绑 事件触发 等这些方法使用的都是Event构造函 数创建出来的对象。有了这个event对象 接下来就是利用each方法和extend方法给jquery.fn这个 对象添加一些事件监听器。内部都是调用了event的方法。
动画模块 :
CSS选择器模块
DOM操作模块
转载于:https://www.cnblogs.com/leelike/archive/2011/01/21/1940747.html
jQuery框架总体分析相关推荐
- jQuery框架学习
之前也看过jquery库源码,网上也有很多对于jquery框架的分析教程,但是最近又想花点时间重新学习.jquery问世以来受到了广大的前端开发者的青睐,对于很多前端开发者来说,走上前端的道路不是从写 ...
- jquery框架分析-构造jquery对象初步
这是一些分析jquery框架的文字 针对jquery 1.3.2版本 面向的读者应具备以下要求 1.非常熟悉HTML 2.非常熟悉javascript语法知识 3.熟悉javascript面向对象方面 ...
- jQuery框架的 find() 方法 以及各种 复杂的情况 分析为什么
jQuery框架的 find() 方法 find()方法 的 执行思路: 00-1: 首先 确定 搜索 范围:[范围指的是 通过jQuery框架的 $() 或者 联合框架的其他方法 而拿到 的jQue ...
- [转载]浅析jQuery框架与构造对象
浅析jQuery框架与构造对象 这是一些分析jQuery框架的文字 针对jQuery 1.3.2版本 面向的读者应具备以下要求 1.非常熟悉HTML 2.非常熟悉javascript语法知识 3.熟悉 ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote P ...
- 从零实现一个简易jQuery框架之一—jQuery框架概述
我们知道,不管学习任何一门框架,了解其设计的理念.目的.总体的结构及核心特性对我们使用和后续的深入理解框架都是有很大的帮助的.因此在这里先梳理一下本人对jQuery框架的一些理解. 设计目的(为什么要 ...
- jQuery源码分析系列 : 整体架构
query这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍 我也不会照本宣科的翻译源码,结合自己的实际经验一起拜读吧! ...
- [转] jQuery源码分析-如何做jQuery源码分析
jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...
- RPC调用框架比较分析
什么是RPC: RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...
最新文章
- python使用matplotlib可视化、使用subplots函数将可视化的画布划分为网格状的若干子区、通过nrows和ncols参数设置设置行数和列数
- cms-幻灯片的实现
- DF标志和串传送指令
- 【MySQL】如何让数据库查询区分大小写
- unity 纹理压缩格式‘_纹理优化:让你的纹理也“瘦”下来
- 想说爱你不容易,浏览器缓存浅谈
- SAS在金融中的应用六
- 使用jquery判断及改变checkbox选中状态
- 各计算机系统用传输介质互连,计算机网络技术与应用.doc
- 常规网站模板(flash作div背景)
- 计算机组成原理定点源码一位乘,计算机组成原理课程设计-定点原码一位乘法器的设计.doc...
- Color颜色——颜色模式、颜色基本特征、网页颜色以及其代码
- 【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
- .mpp文件在线打开网址
- Fedora14 基于Qt的UDP传输文字聊天小软件实现 (Qt查询本地Ip、Qt本地时间显示、传输中文汉字实现、Qt的textedit自动滚屏实现、给QPushButton设键盘快捷实现)---续上
- pandoc实现文档不同格式的转换
- 枚举算法5——填数游戏
- Windows时钟同步(时间同步)问题
- JS--实现漂浮广告
- 实习生风采 · 贰 | 张倬胜同学:攻关「孟子」轻量化预训练模型
热门文章
- linux下时区的一些认识
- 2014年上半年工作随记
- mybatisplus查询今天的数据_springboot集成mybatisPlus
- macsfancontrol 设置方法_重庆市材料好的消防应急筒灯使用方法
- 【算法】剑指 Offer 29. 顺时针打印矩阵
- 【IDEA】Warning:scala: skipping Scala files without a Scala SDK in module(s) systemimport
- 【Elasticsearch】揭秘 Elasticsearch 分片分配
- 【redis】redisDesktopManager之redis可视化客户端 界面介绍
- 【JVM】GC Roots 根可达
- Spring :基于@Transactional注解的声明式事物