jquery 源码分析初步

来源:互联网 发布:淘宝正品代购店铺推荐 编辑:程序博客网 时间:2024/06/14 02:08


jquery 所有版本下载和引用地址

http://www.jq22.com/jquery-info122


一 jquery源码要点

jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作

jQuery的无new构建
JavaScript是函数式语言,函数可以实现类,类就是面向对象编程中最基本的概念

怎么访问jQuery类原型上的属性与方法?
     做到既能隔离作用域还能使用jQuery原型对象的作用域呢,还能在返回实例中访问jQuery的原型对
象?
实现的关键点
通过原型传递解决问题,把jQuery的原型传递给jQuery.prototype.init.prototype
换句话说jQuery的原型对象覆盖了init构造器的原型对象
因为是引用传递所以不需要担心这个循环引用的性能问题

链式调用
DOM链式调用的处理:
1.节约JS代码.
2.所返回的都是同一个对象,可以提高代码的效率
通过简单扩展原型方法并通过return this的形式来实现跨浏览器的链式调用。
利用JS下的简单工厂模式,来将所有对于同一个DOM对象的操作指定同一个实例。

====
jQuery.extend和jQuery.fn.extend其实是同指向同一方法的不同引用。
====
jQuery并没有将事件处理函数直接绑定到DOM元素上,而是通过.data存储在缓存.data存储在缓存.cahce
上。

 首先为DOM元素分配一个唯一ID,绑定的事件存储在.cahce[唯一ID][.cahce[唯一ID][.expand ][ 
'events' ]上,而events是个键-值映射对象,键就是事件类型,对应的值就是由事件处理函数组成的数
组,最后在DOM元素上绑定(addEventListener/ attachEvent)一个事件处理函数eventHandle,这个过
程由 jQuery.event.add 实现。
执行绑定的时候:
当事件触发时eventHandle被执行,eventHandle再去$.cache中寻找曾经绑定的事件处理函数并执行,这
个过程由 jQuery.event. trigger 和 jQuery.event.handle实现。
事件的销毁则由jQuery.event.remove 实现,remove对缓存$.cahce中存储的事件数组进行销毁,当缓存
中的事件全部销毁时,调用removeEventListener/ detachEvent销毁绑定在DOM元素上的事件处理函数
eventHandle。
====
.domManip()是jQuery DOM操作的核心函数

对封装的节点操作做了参数上的校正支持,与对应处理的调用

domManip其实就只做了2事件
第一个就是判断3种传递参数所映射的对应操作
第二个就是通过调用jQuery.buildFragment生成文档碎片
====
Queue队列,如同data数据缓存与Deferred异步模型一样,都是jQuery库的内部实现的基础设施

Queue队列是animate动画依赖的基础设施,整个jQuery中队列仅供给动画使用

那么jQuery引入队列其实从一个角度上可以认为:允许一系列函数被异步地调用而不会阻塞程序

$("#Aaron").slideUp().fadeIn()
这是jQuery的一组动画链式序列,它的内部其实就是一组队列Queue,所以队列和Deferred地位类似, 
是一个内部使用的基础设施,当slideUp运行时,fadeIn被放到fx队列中,当slideUp完成后,从队列中
被取出运行。queue函数允许 直接操作这个链式调用的行为。同时,queue可以指定队列名称获得其他能
力,而不局限于fx队列
====
jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 


内存泄露的几种情况
循环引用
Javascript闭包
DOM插入顺序


一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对
象可能会引发内存泄漏。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环
引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。


含有DOM对象的循环引用将导致大部分当前主流浏览器内存泄露
====

摘录自

http://www.cnblogs.com/aaronjs/p/3279314.html


二 jquery 2.0.3折叠后的源码截图

























0 0