读jQuery源码之七(Event)

1.Event中最核心的方法有3个

 

其它外在的方法(on,off,one,delegate,bind.etc.)都是调用直接或间接调用(比如on调用了add,delegate调用了on)来完成,所以我也重点读这部分的代码,对于事件绑定推荐使用on或off方法。例如用on可以代替delegate,bind和unbind也不推荐再使用,底层仍然调用了on和off。 继续阅读“读jQuery源码之七(Event)”

读jQuery源码之六(Data缓存和Queue队列)

源码3523-3706 Data对象及原型定义

1.accessData方法和Data函数。

1.1 accessData判断传入的节点类型是否属于:元素节点和document节点

1.2 Data函数:给Data添加了一个cache对象,并且给这个对象添加了一个属性0,默认值为{}

这里有一个地方需要注意,Data函数里面使用了Object.defineProperty和Object.defineProperties方法。descriptor里面定义get或set等。如果没有定义enumerable的值默认情况下为false。这就回导致你定义了一个熟悉,for in遍历的时候获取不到这个属性。这里需要注意下,可以直接读取,但是无法for in。 继续阅读“读jQuery源码之六(Data缓存和Queue队列)”

读jQuery源码之五(ready事件,access)

源码3373-3461 :主要包含ready事件

1.ready和load事件

ready事件会在DOM结构加载完成的时候执行,在load事件之前触发。

load事件在文档加载完毕,所有的元素,资源(图片,css,嵌入的iframe)加载完毕触发。大多数情况下,只需要DOM结构加载完毕就可以执行js代码。

IE9+和其他浏览器都支持了DOMContentLoaded事件,针对IE9以下版本的IE浏览器可以监听onreadystatechange。新版的jQuery是不兼容旧版的IE了,源码里面只监听DOMContentLoaded事件。 继续阅读“读jQuery源码之五(ready事件,access)”

读jQuery源码之四(Callbacks,Deferred,when)

看了下Sizzle部分源码,核心的原理就是使用正则表达式去匹配,找到对应的原生获取元素的方法,我没有去细究了。大家有兴趣可以自己看看,分享分享!

从2850行开始,继续往下读jQuery源码(2850-3043行)

进入Callbacks(回调函数管理模块)之前,有几个扩展方法

继续阅读“读jQuery源码之四(Callbacks,Deferred,when)”

读jQuery源码之三(extend)

源码177-527行:jQuery.extend方法
1. jQuery.extend的功能是合并多个对象的属性到第一个对象,第一个参数用来表示是否递归合并,不过我真没看出来有什么场景使用,我试过很多种合并,true和false都是一样的结果,如果你有可以区分的例子,麻烦留言告诉我。

继续阅读“读jQuery源码之三(extend)”

读jQuery源码之二(初始化和原型)

代码片段92-175行,定义了jQuery的原型(prototype)对象

1.首先清楚的jQuery初始化的方式,不是直接new jQuery(),而是直接使用jQuery(),为什么要这样做以及为什么可以这样做?

在jQuery的构造函数里面返回另一个构造函数的实例,可以简化使用,直接使用jQuery(),而不用加上new关键字。下面分析为什么能够这样做,jQuery是怎样实现的。我写了一个简单的例子,代码如下:

继续阅读“读jQuery源码之二(初始化和原型)”

读jQuery源码之开篇

好久没有写博客了,不是我忘记了这个习惯,而是这一年半的时间我在经历技术的转型,所以在.NET上面的技术没有太多的深入了。

从再次回到凡客开始,我已经从一名有3年开发经验的.NET工程师向前端(H5)全面转型。至于为什么转型,不在这篇博客赘述了!

继续阅读“读jQuery源码之开篇”