1。总体架构

1.1自调用匿名函数

//自调用匿名函数

(function(window,undefined){
  //jquery code
})(window);

1.这是一个自调用匿名函数。第一个括号内创建一个匿名函数,第二个括号,立即执行
2。为什么要创建这样一个“自调用匿名函数”呢???
通过定义一个匿名函数,创建一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是js框架必须支持的功能,jQuery应用,必须要确保jQuery创建的变量不能和导入他的程序所使用的变量冲突
3.匿名函数从语法上叫函数直接量,javascript语法包括匿名函数的括号,事实上自调用匿名函数有两种写法
第一种
(function(){

})(window);
第二种
(function(){

}(window));
4.为什么要传入window呢?
通过传入window变量,使得window由全局变量变成局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window,更重要的是,window作为参数传入,可以压缩代码进行优化
(function(a,b){
//window被优化为a
})(window);
5.为什么要在参数列表增加undefined呢??
在自调用匿名函数作用域内,确保undefined是真的未定义,因为undefined能够被重写,赋予新的值
undefined = "now it's defined";
alert( undefined );
6.注意到源码最后的分号了吗?
分号是可选的,但省略分号,并不是好的编程习惯,为了更好的兼容在每行代码后加上分号并养成习惯

jQuery() $()
构造函数就是初始化一个实列对象,对象的prototype属性是继承一个实列对象、构造函数注意事项
1、默认函数首字母大写
2、构造函数并没有显示返回任何东西。new操作符会自动创建给定的类型并且返回他们,当调用构造函数时,new会自动创建this对象,类型就是构造函数类型
3、也可以在构造函数中显示调用return.如果返回值是一个对象,他就会替代新创建的对象实列返回,如果返回值是一个原始类型,他就被忽略,新创建实列会被返回。

function Aaa(){}
//一般构造函数
Aaa.prototype.init=function(){alert('init')};
Aaa.prototype.css=function(){alert('css')};

var a1=new Aaa();
a1.init();//初始化
a1.css();

//jquery写法

function jQuery(){
  return new jQuery.prototype.init();
}
jQuery.prototype={
  constructor:jQuery,
  init:function(){/*初始化*/},
  css:function(){console.log('css')}
}
jQuery.prototype.init.prototype=jQuery.prototype;
jQuery().css();
jQuery()->new jQuery.prototype.init();
//把jQuery的原型指向自己的init方法(看做构造函数)的原型上

function jQuery(){
  return new jQuery.prototype.init();
}
jQuery.prototype.init = function(){
};
jQuery.prototype.css = function(){
};
jQuery.prototype.init.prototype = jQuery.prototype;

jQuery().css();

jquery源码解读 (摘自jQuery源码分析系列图书(pdf)) 持续更新的更多相关文章

  1. go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

    从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...

  2. DRF(1) - REST、DRF(View源码解读、APIView源码解读)

    一.REST 1.什么是编程? 数据结构和算法的结合. 2.什么是REST? 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下: /books/ /get_all_books/ 访问所 ...

  3. REST、DRF(View源码解读、APIView源码解读)

    一 . REST            前言 1 . 编程 : 数据结构和算法的结合 .小程序如简单的计算器,我们输入初始数据,经过计算,得到最终的数据,这个过程中,初始数据和结果数据都是数据,而计算 ...

  4. Restful 1 -- REST、DRF(View源码解读、APIView源码解读)及框架实现

    一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? - url用来唯一定位资源,http请求方式来区分用户行为 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下 ...

  5. spring源码解读之 JdbcTemplate源码

    原文:https://blog.csdn.net/songjinbin/article/details/19857567 在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数 ...

  6. go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go

    本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go.context.go和wait_group_wrapper.go. options.go 123456789101 ...

  7. go语言nsq源码解读五 nsqlookupd源码registration_db.go

    本篇将讲解registration_db.go文件. 1234567891011121314151617181920212223242526272829303132333435363738394041 ...

  8. php-msf 源码解读【转】

    php-msf: https://github.com/pinguo/php-msf 百度脑图 - php-msf 源码解读: http://naotu.baidu.com/file/cc7b5a49 ...

  9. Flask(4)- flask请求上下文源码解读、http聊天室单聊/群聊(基于gevent-websocket)

    一.flask请求上下文源码解读 通过上篇源码分析,我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__call__方法返回了app的wsgi_app(en ...

随机推荐

  1. java的super和this关键字用法总结

    ------super关键字------                 super用途:在子类中访问超类“被隐藏的成员变量(无论是否静态)和静态方法”以及“被重写的实例方法”.这里的超类必须是“直接 ...

  2. Mysql导出表结构、表数据

    导出 (cmd)     1.导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚本名為db.sql)    mysqldump -u root -p dbpass ...

  3. web service初探

    概述:Web service是一个平台独立.低耦合的.自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发 ...

  4. 并发工具类(三)控制并发线程的数量 Semphore

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...

  5. 国内各类“壳子”浏览器,userAgent 一览

    [测试环境]:测试日期:2014-6-20 我本机的chrome是36.0的,IE是10.0的.下列各浏览器大多数都是最新版,少数是半年以内的版本. 内核 chrome 版本 36.0 userAge ...

  6. 7. myeclipse10反编译插件安装

  7. spring-boot+quartz的CRUD动态任务管理系统

    版权声明:作者: 小柒 出处: https://blog.52itstyle.com 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大 ...

  8. 使用JsonViewer来格式化json字符串

    1. 在线转换 https://www.bejson.com/jsonviewernew/ ==>格式化 2. 使用notepad ++ 的jsonViewer插件 下载地址 http://ww ...

  9. svn异常处理

    TortoiseSVN 为客户端,SUBVersion为服务器端. 1.安装的tortoiseSVN不在鼠标右键菜单栏 出现这种原因是电脑的系统和svn不符,即电脑是64位系统,而svn是32位的. ...

  10. 前端开发-2-HTML

    1.开发环境 市面上有很多的HTML编辑器可以选择,常见的Hbuild.Sublime Text.Dreamweare都可以用来开发HTML. 当然PyCharm也支持HTML开发. 2.文件后缀名规 ...