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. BPM编程模型(场景)

    一直开发基于操作的业务系统,主要就是通过界面,用户提交一些数据完成任务,大多数涉及多人协作的,基本都是浏览,少数可能对其进行审批,这里的审批不是电子政务那样的多人审批任务,仅仅是对数据的一个操作而已, ...

  2. Spark 编程模型(上)

    Spark的编程模型 核心概念(注意对比MR里的概念来学习) Spark Application的组成 Spark Application基本概念 Spark Application编程模型 回顾sc ...

  3. 存储设备的DDP功能详解

    http://blog.csdn.net/u013394982/article/details/18259015 DDP功能,即Dynamic Disk Pool,它是除了现有的RAID0,1,10, ...

  4. Python之函数——基础篇

    函数 函数,在BASIC中,叫subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java中叫method. 定义: ...

  5. 红帽配置Centos仓库[红帽Redhat7替换Centos7网络源]

    1.卸载红帽yum源 rpm -e $(rpm -qa|grep yum) --nodeps 2.删除所有repo相关文件 rm -rf /etc/yum.conf rm -rf /etc/yum.r ...

  6. 4. 纯 CSS 创作一个金属光泽 3D 按钮特效

    原文地址:https://segmentfault.com/a/1190000014599280 HTML代码: <div class="box">BUTTON< ...

  7. location 对象属性

    Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路 ...

  8. 使用IDEA开发Activiti工作流

    首先安装cativiti插件,安装成功后重启IDEA 然后在文件夹右键选择 然后就可以画图了,但是画图之后,没有连接图标怎么办呢 把鼠标放在开头的那个图标上,此时光标的形状改变了. 拖到另一个上面,连 ...

  9. Tocmat 启动错误 Port 8005 required by tomcat v7.0 server at localhost is already in use

    1: netstat -ano!findstr 8005 2: taskkill /pid 6476 /f

  10. UI5-文档-4.35-Responsiveness

    在这一步中,我们将改进应用程序的响应能力.SAPUI5应用程序可以在手机.平板电脑和桌面设备上运行,我们可以对应用程序进行配置,以便为每个场景充分利用屏幕空间.幸运的是,SAPUI5控件类似于sap. ...