用了2周,把jquery2.1.1版本的源码读了一遍,像得了感冒,头疼、恶心、没精神。。。
涉及Javascript基本知识点:
工厂模式、闭包、正则表达式、引用类型(function、regExp、string、array)、块级作用域、
DOM API、原型、数据基本类型、操作符(尤其布尔操作符)、函数(尤其是重载)
边看源码边读Javascript高级程序设计,发现自己的基础又忘记差不多了。。
涉及标准或设计模式:
Promise/A、HTML4.01 HTML5、Selectors API Level 1、Selectors Level3
涉及开源项目:
Sizzle Javascript Selector Library
涉及模块化编程
CommonJs、AMD、CMD
整体上来看,外层为一个自调用匿名函数(function(xx,xx){...}(xx,xx));内层为工厂模式,而jQuery多个模块也使用了工厂模式进行封装
关于jQuery模块,主要包括以下几个模块
核心(init、extend)、Data、Callbacks、Deferred、Ajax、事件、Animation、Sizzle
jQuery充分利用了Javascript松散的语言特性。例如,Callbacks模块中,stack = !option.once && [],这个stack可能是布尔值或数组,
在fire方法中,根据其数据类型不同,进行不同的操作。
但是,各位大神所说的精妙只在读个别代码时,有所感觉。
总体来说,对jquery源码理解还不够深入,对各位大神说的抽象思维真真是没做到。
接下来,根据jquery书籍和网上资料,不断的去细读、精读源码,达到第一个小目标。
第二遍感受
js基础知识运用灵活,小技巧特别多;
浏览器兼容性问题,集中解决,只是在某些模块零散分布;
抽象思维非常强,逻辑严谨,少量代码,实现大量功能;
目前使用jQuery解决业务的水平,处于及格水平,看了源码,认为jQuery提供了很多其他的更高级、更优雅得解决业务问题的思路和方法;
梳理了知识结构,扩充技术知识面(正则表达式、ES5API、XSS),深入底层技术;
jquery源码分析笔记和示例地址https://github.com/respectable2007/jquery-source-code-explanation