抽丝剥茧, 7000+ 行的 jQuery 源码基本可以概括为以下的伪代码

  1. (function (window, undefined) {
  2. //将 document 封装成 jQuery 对象并缓存
  3. var rootjQuery,
  4.  
  5. //dom ready 事件的委托队列
  6. readyList,
  7.  
  8. //快速地识别 html 标记 如 <div> 或者 #id
  9. rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
  10.  
  11. jQuery = function (selector, context) {
  12. return new jQuery.fn.init(selector, context, rootjQuery);
  13. };
  14.  
  15. jQuery.fn = jQuery.prototype = {
  16. constructor: jQuery,
  17. init: function (selector, context, rootjQuery) {
  18.  
  19. // $(""), $(null), $(undefined), $(false)
  20. if (!selector) {
  21. return this;
  22. }
  23.  
  24. var match = rquickExpr.exec(selector);
  25.  
  26. // $('<div></div>')
  27. jQuery.parseHTML(match[1])
  28. return this;
  29.  
  30. // $(#id)
  31. return document.getElementById(selector);
  32.  
  33. // $('.class'), $('.class', context), $('#class', context)
  34. // 其中 context 是jQuery元素
  35. return (context || rootjQuery).find(selector);
  36.  
  37. // $('.class', domElm)
  38. return this.constructor(context).find(selector);
  39.  
  40. // selector is function
  41. return rootjQuery.ready(selector);
  42.  
  43. return jQuery.makeArray(selector, this);
  44. },
  45. ready: function (fn) {
  46. // Add the callback
  47. jQuery.ready.promise().done(fn);
  48.  
  49. return this;
  50. }
  51. }
  52.  
  53. jQuery.init.prototype = jQuery.fn;
  54.  
  55. jQuery.extend = jQuery.fn.extend = function () {
  56. };
  57.  
  58. rootjQuery = jQuery(document);
  59.  
  60. // Sizzle 代码
  61. (function (window, undefined) {
  62.  
  63. function Sizzle(selector, context, results, seed) {
  64. if (support.qsa) {
  65. return querySelectorAll(selector)
  66. }
  67.  
  68. return select(selector.replace(rtrim, "$1"), context, results, seed);
  69. }
  70.  
  71. function select(selector, context, results, seed) {
  72. var match = tokenize(selector);
  73. }
  74.  
  75. function tokenize(selector, parseOnly) {
  76.  
  77. }
  78.  
  79. jQuery.find = Sizzle;
  80. })(window);
  81.  
  82. // 对 jQuery 对象的扩展
  83. jQuery.extend({});
  84.  
  85. // 对 jQuery.fn 对象的扩展
  86. jQuery.fn.extend({});
  87.  
  88. window.$ = window.jQuery = jquery;
  89.  
  90. })(window);

jQuery 源码基本框架的更多相关文章

  1. jQuery源码整体结构(源码2.0.3)

    拨开jQuery的面纱,最近了解了下jQuery源码整体框架.主要包括: (1)  jQuery 核心模块 (2)  sizzle 选择器引擎 (3)  Deferred 异步队列 (4)  Supp ...

  2. jQuery源码分析之整体框架

    之前只是知道jQuery怎么使用,但是我觉得有必要认真的阅读一下这个库,在分析jQuery源码之前,很有必要对整个jQuery有个整体的框架概念,才能方便后面对jQuery源码的分析和学习,以下是我总 ...

  3. 三.jQuery源码解析之jQuery的框架图

    这张图片是对jQuery源码截图,一点一点拼出来的. 现在根据这张图片来对jQuery框架做一些说明. 一.16~9404行可以发现,最外层是一个自调用函数.当jQuery初始化时,这个自调用函数包含 ...

  4. 读jQuery源码之整体框架分析

    读一个开源框架,大家最想学到的就是设计的思想和实现的技巧.最近读jQuery源码,记下我对大师作品的理解和心得,跟大家分享,权当抛砖引玉. 先附上jQuery的代码结构. (function(){ / ...

  5. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  6. jQuery源码:从原理到实战

    jQuery源码:从原理到实战 jQuery选择器对象 $(".my-class"); document.querySelectorAll*".my-class" ...

  7. JQuery源码解析(一)

    写在前面:本<JQuery源码解析>系列是基于一些前辈们的文章进行进一步的分析.细化.修改而写出来的,在这边感谢那些慷慨提供科普文档的技术大拿们. 要查阅JQ的源文件请下载开发版的JQ.j ...

  8. jQuery源码笔记(一):jQuery的整体结构

    jQuery 是一个非常优秀的 JS 库,与 Prototype,YUI,Mootools 等众多的 Js 类库相比,它剑走偏锋,从 web 开发的实用角度出发,抛除了其它 Lib 中一些中看但不实用 ...

  9. jquery 源码解析

    静态与实力方法共享设计 遍历方法 $(".a").each() //作为实例方法存在 $.each() //作为静态方法存在 Jquery源码 jQuery.prototype = ...

随机推荐

  1. HDOJ1518Square 深搜

    Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. SRM 408(1-250pt, 1-500pt)

    DIV1 250pt 题意:每天晚上需要点蜡烛,且每晚蜡烛燃烧1cm,第i天晚上需要点i根蜡烛.第一天白天的时候,拥有一些蜡烛,用vector<int>can表示他们的长度,问最多能烧几个 ...

  3. SQL 分组 加列 加自编号 自编号限定 分类: SQL Server 2014-11-25 15:41 283人阅读 评论(0) 收藏

    说明: (1)日期以年月形式显示:convert(varchar(7),字段名,120) , (2)加一列 (3)自编号: row_number() over(order by 字段名 desc) a ...

  4. Spring MVC之messageConverters

    <mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案.<mvc:annotation-dri ...

  5. Android ListView的背景和黑色边缘化的问题

    解决方法1:给listview加上android:scrollingCache=”false”属性 解决方法2:给listview加上android:cacheColorHint="#000 ...

  6. 屏幕录制:SCR Screen Recorder Pro v0.14.3汉化破解版

    应用概览 <ignore_js_op> 软件名称:屏幕录制:SCR Screen Recorder Pro 软件版本:v0.14.3汉化破解版软件语言:中文软件大小:3.5M软件包名:co ...

  7. Ubuntu 命令行下快速打开各类文件 分类: ubuntu shell 2014-11-18 20:06 210人阅读 评论(0) 收藏

    xdg-open 命令可以用来在Ubuntu下快速打开各类文件. 下面是从 manual 文档里截取的内容: 可以知道,该命令的功能是在图形界面下按照用户的平时习惯打开各类文件,甚至是链接. 这样,我 ...

  8. 习WebSocket一(WebSocket初识)[转]

    http://www.cnblogs.com/wgp13x/p/3812579.html Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tom ...

  9. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

  10. android 56

    ##其他布局 * LinearLayout * RelativeLayout * FrameLayout * AbsoluteLayout (绝对布局, 文档说过时,应用场景机顶盒开发,定制的平板) ...