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. HTML5进阶

    内容: 1.geolocation元素 2.video元素和audio元素 3.localStorage 4.WebWorker 5.WebSQL.IndexedDB 6.文件操作.文件拖拽新概念 7 ...

  2. 修改oracle数据库默认时间格式

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ccchencheng.blog.51cto.com/2419062/929695 ...

  3. ldap复制

    1.使用yum命令安装openldap,openldap-servers,openldap-clients $ yum install openldap $ yum install openldap- ...

  4. CentOS7.3下yum练手安装Nginx,支持php5.4

    yum install php php-devel 安装的是5.4 那么安装完毕了,怎么设置nginx和php 解析 1 添加nginx 默认主页index.php  vim .../etc/ngin ...

  5. 使用再生龙Clonezilla备份还原Linux系统

    一位老哥推荐给我的,产地是祖国宝岛台湾,实测效果非常好,解决了我的一个大问题. 为了减少篇幅,方便阅读,把备份还原的过程单独写一篇随笔. 官网简介:http://clonezilla.nchc.org ...

  6. 基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件

    这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理.为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象. 实现思路: ...

  7. 18 subprocess模块(跟操作系统交互)

    1.基本概念介绍 我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的, 每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本 ...

  8. 分享 - 27 个机器学习、数学、Python 速查表

      转载自:伯乐在线 - iPytLab,原文链接,侵删 机器学习涉及到的方面非常多.当我开始准备复习这些内容的时候,我找到了许多不同的”速查表”, 这些速查表针对某一主题都罗列出了所有我需要知道的知 ...

  9. 向数据库添加学生信息。存放在REQUEST对象里

    代码前几天已经发过了,但是程序一直还没运行出来,今天重新建立了一个数据库,才可以,下面补充上数据截图

  10. redmine邮件配置

    网上找了半天,有很多答案,最后自己测试找出一个解决办法. 1.找到安装位置 D:\Bitnami\redmine-2.5.2-2\apps\redmine\htdocs\config下的文件confi ...