1. 立即执行函数

简化后的代码就是这样

(function(global, factory) {...
})(window, function () {});

Q:采用立即执行函数的好处是什么呢?

A:   通过定义一个匿名函数,创建了一个新的函数作用域,相当于创建了一个私有的命名空间,不会污染全局变量。若想访问全局对象,将全局对象以参数的形式传进去即可。此外,新的作用域内对象想访问传入的全局对象时,就不需要一步一步的往上找,可提高效率。

2. init()

我们看如下一段代码:

var s = new $('.test');
var p = $('.test');
console.log(s);
console.log(p);

效果如下

令人惊讶的是,new 出来的和直接调用的,居然是一模一样的。

这就设计到了jQuery的经典的init操作:

查看core文件,可以了解到:

// 1jQuery = function (selector, context) {return new jQuery.fn.init(selector, context);
}// 2
jQuery.fn = jQuery.prototype = {init: function (selector, context ) {...}
}// 3
init = jQuery.fn.init = function (selector, context, root) {...
}init.prototype = jQuery.fn;
  • 步骤1: 我们从代码块2开始看,jQuery.prototype = jQuery.fn,且都挂在了init()函数。
  • 步骤2: 代码块3,jQuery.fn.init.prototype = jQuery.fn,而我们从步骤1中,了解到jQuery.prototype = jQuery.fn。因此,jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype。
  • 步骤3: 最后,再回过头来看代码块1,function 返回的是 new jQuery.fn.init(...)。我们再看步骤2,jQuery.fn.init.prototype = jQuery.prototype。那么,new jQuery.fn.init(...)就相当于function 返回了一个new JQuery()。

绕了一大圈,就相当于 jQuery = new jQuery();

Q: 那么,为啥要绕那么远呢?

A: 为了得到jQuery原型链上的方法。

jQuery源码阅读相关推荐

  1. jQuery源码阅读3— bulidFragment( )

    jQuery的buildFragment函数,主要是将传入的HTML代码用document.createDocumentFragment转变成文档碎片,具体细节如下图: 图片来源于jQuery技术内幕 ...

  2. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  3. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  4. 学习 jQuery 源码整体架构,打造属于自己的 js 类库

    虽然现在基本不怎么使用 jQuery了,但 jQuery流行 10多年的 JS库,还是有必要学习它的源码的.也可以学着打造属于自己的 js类库,求职面试时可以增色不少. 本文章学习的是 v3.4.1版 ...

  5. Mr.J-- jQuery学习笔记(二十四)--剖析jQuery源码--extend

    定义和用法 jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象. 注意:1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略.此时,target就 ...

  6. jQuery 源码解析一:jQuery 类库整体架构设计解析

    如果是做 web 的话,相信都要对 Dom 进行增删查改,那大家都或多或少接触到过 jQuery 类库,其最大特色就是强大的选择器,让开发者脱离原生 JS 一大堆 getElementById.get ...

  7. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: github.com/hanzichi/un- 一.架构的实现 1.1:架构 (f ...

  8. 应用监控CAT之cat-client源码阅读(一)

    CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控.对于及时发现线上问题非常有用.(不知道大家有没有在用) 应用自然是最初级的,用完之后,还想了解下其背后的原理, ...

  9. centos下将vim配置为强大的源码阅读器

    每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译.出现问题,还得重新回到windows端,这个过程太耗 ...

  10. 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking

    该文章阅读的AFNetworking的版本为3.2.0. 这个分类提供了对请求周期进行控制的方法,包括进度监控.成功和失败的回调. 1.接口文件 1.1.属性 /**网络会话管理者对象*/ @prop ...

最新文章

  1. R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将多个可视化结论嵌套起来输出(ggarrange组合ggarrange组合后的图像)
  2. Cent0S 7上的图形安装
  3. 从并发视角来看智能合约(上)【渡鸦论文系列】
  4. 转载:(C/C++函数返回多个值)
  5. 共享几套silverlight2 toolkit最新的皮肤控件样式下载
  6. Java 9:对Process API的增强
  7. LeetCode 1563. 石子游戏 V(DP)
  8. ASP.NET Core管道深度剖析
  9. 哈希冲突常用解决方法
  10. 17 java 存在的问题(转)
  11. kubernetes RC(Replication Controller)和RS(Replicaset)的作用和区别
  12. Matlab实现无标度网络生成及其分析
  13. java毕业设计软件源代码SSM酒店管理系统|旅店管理
  14. lzma java sdk,Java LZMA 磁盘与内存压缩实现
  15. 菜鸟的草缸 篇四:菜鸟的草缸:二氧化碳CO2
  16. 软件编程c语言5级,全国青少年软件编程等级考试标准(c语言1级-10级)-20190927.pdf...
  17. P1551 亲戚 (并查集)
  18. 我xp电脑桌面没有计算机图标不见了,XP电脑开机后桌面图标打开方式全部不见的恢复方法...
  19. 瓜瓜的时空旅行,第三次模拟赛,dfs序+线段树维护最小值
  20. win7 32位浏览器不能打开,64位浏览器正常的解决方法

热门文章

  1. 【学习记录贴】#3——校园二维和三维电子地图制作
  2. linux软件安装rar,Rar for Linux的安装方法
  3. matlab分割txt数据,MATLAB批量分割txt数据
  4. python水仙花数_python求解水仙花数的方法
  5. LWIP协议栈详解(2)_网络接口层与协议栈初始化
  6. LWIP协议 | 理论基础知识解析
  7. 全国计算机三级嵌入式资料
  8. 解决csdn登陆后复制的方法
  9. 深入浅出SpringSecurity
  10. 信号检测与估计(1)