zepto.js源码解读(一):初窥全貌

因为公司是电商公司的缘故,主做H5页面,故使用了zepto.js这个库。因此就萌生解读一下源码的想法。以此记录下,方便自己归纳知识,以及督促自己。don’t talk, show me the code.

down了1.1.6的未压缩版。打开源码,可以看到九百多行代码。

它定义了一个Zepto变量,它被包含在一个快速执行函数里面。

 var Zepto = (function(){
        //...
})();
window.Zepto = Zepto
window.$ === undefined && (window.$ = Zepto)

可以看到,Zepto被挂载在了window这个全局对象上(window.Zepto = Zepto)。并且当window对象上的$未定义的时候,将Zepto赋给这个 $。那么我们平时用的$(ele)其实就是Zepto(ele)。

展开Zepto这个变量,我们发现包裹它的这个快速执行函数给我们返回了一个值:$。那么这个$是怎么来的呢?抽象下源码:

var Zepto = (function() {
    var $;
    //...
    $ = function(selector, context){
    return zepto.init(selector, context)
  }
  //...
$.zepto = zepto;
//zepto挂载到$上
return $
})()

window.Zepto = Zepto
window.$ === undefined && (window.$ = Zepto)

$呢,其实就是function(selector, context){//…}这个函数的返回值。

总结下就是: 定义个Zepto变量 ==> 把它挂载在全局对象window上 ==> window上未定义$,就将Zepto赋给$。==> Zepto变量的执行结果是返回一个$, $又是一个函数(zepto.init())的返回值,zepto这个对象被挂载到了这个$上。
注意这里的Zepto和小写的zepto不是一个概念。

那么 zepto又是什么?

//....
zepto = {};
//....
zepto.init = function(selector, context) {
//...
}

它一开始被定义为一个空对象,它有一个init方法。结合上面抽象出来的代码,我们发现,当$(‘div’)的时候,其实调用了zepto.init()这个函数的返回值。

zepto.init()又做了什么呢?

如果接着往下说,篇幅可能有点大,放在下篇去讲。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值