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 ...
随机推荐
- Open Xml SDK Word模板开发最佳实践(Best Practice)
1.概述 由于前面的引文已经对Open Xml SDK做了一个简要的介绍. 这次来点实际的——Word模板操作. 从本质上来讲,本文的操作都是基于模板替换思想的,即,我们通过替换Word模板中指定元素 ...
- WPF之DataContext
1. 继承属性: DataContext is a property on FrameworkElement (base class for all WPF Controls) and is impl ...
- BZOJ2675 : Bomb
首先通过不断翻转坐标系,假设三个点以横坐标为第一关键字,纵坐标为第二关键字排序后A在B前面,B在C前面. 那么只需要处理以下两种情况: 1.B的纵坐标在AC之间,这时三个点的距离和为$2((x_C+y ...
- MySql Replication配置
一.前言 Mysql Replication作为读写分离的廉价解决方案,支持一主多备的方式进行数据存储,采用二进制日志传送,目前存在着广泛应用,网上相关概念也比较多,不再重复介绍.引用一张官方提供的R ...
- HttpClient_HttpClient 4.3.6 HTTP状态管理
HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...
- Java导出Highcharts生成的图表为图片源码
本文转载自:http://blog.csdn.net/dengsilinming/article/details/7352054 需要的jar包: 需要的js文件:(可以通过http://www.hi ...
- 浅谈Java中的Set、List、Map的区别
http://developer.51cto.com/art/201309/410205_all.htm
- Html - Iframe
父页面调用子页面 //用这个对象调用子页面的函数或者dom var myiframe = $("#right_iframe")[0].contentWindow; 子页面调用父页面 ...
- 使用XHTML+CSS构架的好处到底有哪些?
使用XHTML+CSS构架好处不少,但也确实存在一些问题,不论是因为使用不熟练还是思路不清晰. 1.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{ma ...
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build306)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build306 编译日期:2014-09-24 ====================================== 二. ...