zepto源码--整体框架--学习笔记
为了深入学习javascript,根据别人推荐的方法之一:研究源码。
相对而言,之前的项目中仅仅使用过zepto和jquery,当前阶段,看到好几千行的jquery源码,心生敬畏,望而却步,所以选择相对精简一点的zepto。
首先,最重要的是理清楚zepto的结构。
zepto采用的立即执行函数来实现避免对全局变量污染。
javascript立即执行函数有两张写法:
1、 (function(形参){...})(实际传入参数);
2、 (function(形参){...}(实际传入参数));
zepto为了实现对模块化js,(只认识名词),初始传入两个参数,并且第二个传入的参数是一个函数,
(function(形参1, 形参2){...}(实际传入参数1, function(){...}));
我们在源码上看到的就是这样的一种效果了

也可以将此种写法改为第一种立即执行函数的写法,可能更符合习惯(反正我更习惯第一种写法)。

真正的实现方式都是在立即执行函数的第二个参数的函数内部实现的。
定义一个主体函数Zepto,依然是立即执行的函数,通过函数内部返回一个实际函数。
然后将该Zepto函数赋值给全局的Zepto,即window.Zepto,如果全局上没有使用过$,则使用$作为函数命名。

其中window.$ === undefined && (window.$ = Zepto); 涉及到了&&运算符,这句可以简单的转换为
if (window.$ === undefined) window.$ = Zepto;
将Zepto赋值给window.Zepto是为了在其他地方能够调用到Zepto所封装的各种方法。将Zepto作为window的属性使用。
赋值给Zepto的立即执行函数,封装了所有需要用到的方法。
使用到了JavaScript6中对象继承方法中的“原型式继承”的方法。
原型式继承:
基本想法:借助原型可以基于已有的对象创建新对象,同时还不必须因此创建自定义的类型。
原型式继承的思想可用以下函数来说明:

在Zepto封装的即时执行函数内部定义了一个函数名为Z的构造函数

将内部构造函数Z实例化,作为变量zepto的属性

在初始化的方法中返回实例化之后的zepto.Z对象

zepto初始化之后的对象赋值给$

将zepto赋值给$.zepto,并返回$。

剩下的就是各种方法的实现的过程。

就是通过如此结构,实现了Zepto和$符号调用zepto的主函数。
zepto源码--整体框架--学习笔记的更多相关文章
- zepto源码--定义变量--学习笔记
主要了解一下zepto定义的初始变量. 逐一以自己的理解解析,待到后面完全透彻理解之后,争取再写一遍zepto源码学习的文章. 其中的undefined确实不明白为什么定义这么个变量在这里. docu ...
- zepto源码--插入节点--学习笔记
与生成width和height使用的方法类似,通过`after`, `prepend`, `before`, `append`,这四者之间的共性,生成对应的函数.并根据这四个函数,生成 `insert ...
- zepto源码--width,height--学习笔记
width和height函数,实际上通过css方法也完全可以取到这两个函数的结果.获取width,$elem.css('width');设置width的话,$elem.css('width', 100 ...
- 《Android源码设计模式》学习笔记之ImageLoader
微信公众号:CodingAndroid cnblog:http://www.cnblogs.com/angel88/ CSDN:http://blog.csdn.net/xinpengfei521 需 ...
- 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构
<PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...
- uboot源码整体框架
源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件.每个子目录中都包括cpu.c和interrupt.c.start.S.u-boot.lds. cpu.c:初始化CPU.设 ...
- PHP7 源码整体框架
一.PHP7语言执行原理 常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言. 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编 ...
- .NET 云原生架构师训练营(KestrelServer源码分析)--学习笔记
目录 目标 源码 目标 理解 KestrelServer 如何接收网络请求,网络请求如何转换成 http request context(C# 可识别) 源码 https://github.com/d ...
- 阅读{django-restframework}源码[generics.py]学习笔记
首先django-restframework是基于django的一个框架. mixins.py中开头是这样写的: Basic building blocks for generic class b ...
随机推荐
- WireShark数据包分析数据封装
WireShark数据包分析数据封装 数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程.在OSI七层参考模型中,每层主要负责与其它机器上的对等层 ...
- Linux基础命令(1)
使用Ctr + Alt + F1(2,3,4,5,6)进入终端. 使用Ctr + Alt + F7回到界面. date 显示系统日期 cal 2015 显示2015年的日历表 reboot 重启 sh ...
- python 代码片段8
#coding=utf-8 # 列表推倒式子 data=[x+1 for x in range(10)] print data even_numbers=[x for x in range(10) i ...
- lua if
function fact(n) then else ) end end print("输入一个数") a=io.read("*number") print(f ...
- BZOJ3787 : Gty的文艺妹子序列
将序列分成$\sqrt{n}$块,预处理出每两块之间的逆序对数,以及ap[i]表示前i块内数字出现次数的树状数组 预处理:$O(n\sqrt{n}\log n)$ 修改时,ap[i]可以在$O(\sq ...
- OI优化开关
#pragma comment(linker,"/STACK:10240000,10240000")#pragma GCC optimize ("O2")
- 斯坦福大学 iOS 开发公开课总结
斯坦福大学 iOS 开发公开课总结 前言 iPhone 开发相关的教程中最有名的,当数斯坦福大学发布的 "iPhone 开发公开课 " 了.此公开课在以前叫做<iPho ...
- 李洪强-C语言关键字、标识符和注释
一.关键字 C语言提供的有特殊含义的符号,共32个. 在Xcode中关键字全部高亮显示,关键字全部都为小写.如return.int等. 二.标识符 定义:标识符是程序员在程序中自定义的一些符号和名称. ...
- 初始html5,遇到的第一个问题
1.首先感到html5是html的延续,只是增加了新的标签属性,这是我的第一感觉 2.我写了几行画矩形的canvas入门代码,遇到了不显示问题 3.下面是我写完代码后的问题 刷新后还是这样 4.我的代 ...
- unserialize函数中的参数是否是污染数据
1.原理 在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件.这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出.php中就 ...