1.0古董版,github上木有的
开启流水账模式
- window.undefined = window.undefined;
当年,window下还没有undefined方法,通过不存在的属性获取undefined是可靠地,但你需要保证他的确不存在
void 0;也是不错的选择
- jquery对象的创建
Jquery() 那时还是个逗比,跟原型无关,他只是一个单纯地函数,主要用户方法的回调,和jq对象的产生,在产生jquery对象时,会对获取的数据进行多次数据验证
各种花式判断,可是js中多态的正确使用姿势
- 入口兼容处理
jquery拒绝污染原生js,所有的一切由入口$开始进行,但是$可是香饽饽
- dom操作
由此开始,就这么开始进行封装了,api考虑的无非就是易用,友好,稳定,高效这些万能的词汇
获取
size()
get(index) 获取dom
index(dom) 获取索引
操作--属性
attr(key,value) 无视第三参数,内部用的
快捷属性css
css(key,value)
操作--外部
wrap() 包裹
before()
after()
操作--文本
text()
append()
prepend()
链式操作--维护
end
add
clone
pushStack
链式操作--遍历
find 后代查询,后代的个数不可预测,可能会越来越多的
each 节点遍历foreach
filter 自身过滤
not 剔除
is 判断
jquery是一个一个类库,一个面向对象工具库他由维护对象容器发放依赖对象,交给不依赖任何属性的工具方法,这里才是真正的实现,对象中的存在可以立即为代理
domManip函数
对节点添加划分出了一个domMainip函数,这个函数需要一个fn参数,有点像c#中的委托,不管怎样,的确是一个非常有意思的方式,这就是js中的高阶函数,需要一个fn参数或返回一个fn就是高阶函数
链式操作--记录历史状态
在jquery进行查询的时候,返回this,可以达到简单的链式功能,但链式操作也是非常有意思的规范的,至少你需要可以返回上一个节点,至此,单纯返回this已经不能满足链式操作规范,如果让你来实现这种规范,你会使用Stack吗?
- jquery继承
继承有N多种形式,这种应该算最流行的了,人人都可以通过这种方式给jquery进行增强和打补丁
- 静态方法
静态方法是大多类库甚至库的实现集合,可以发现,很多方法在es5中可以直接使用,他们之间的原由和八卦,who cares
- 浏览器处理
- 初始化参数
回头需要了解init中的实现
- 其他
注入补丁,ready在内的其他函数
其中ready:判断dom是否加载完成,否则加入初始化list中,看来又是一个while(true)型的监控
- ready回掉
这个是常量,可不是实例,ready再次的逻辑还算简单,将fn交给一个list(类似于方法的执行),而后会有事件触发ready,js在第一次执行后,就进入到事件模式,在下面的代码中,肯定会对事件注册ready方法,换句话说,$(fn) 中的方法,被卖了好几道
- 事件补丁
这也是一种自执行的方式,$.extend是一种先处理配置信息,在一次进行注入的补丁方式,而自执行是一种可以混合的脚本模式,关于自执行添加补丁最大的好处在于动态获取/创建key,
jQuery.fn[o]这在配置文件中是无法存在的
随后又是2种补丁,继续无视
而后是爽爽的xhr
为什么越到后面就越来越不想看了呢....