uniq(array)

返回不存在重复值的数组

function classRE(name)

判断classCache中是否已存在name,若存在则取出classCache[name];否则存入该类名的正则表达式至classCache[name]中

function maybeAddPx(name,value)

若name在cssNumber中则返回value;否则返回value+"px"

function defaultDisplay(nodeName)

从elementDisplay中获取该nodeName(即标签类名:a,div,p……)的默认display值;若elementDisplay中不存在nodeName该项,则新建该节点并添加到文档中通过getComputedStyle(element, '').getPropertyValue("display")获取其默认值,若默认为none则设为“block”并存入elementDisplay[nodeName]中

ps:zepto中定义了getComputedStyle=document.defaultView.getComputedStyle

$.each(elements, callback)

若elements是类数组(elements.length 是 number类型),则用for(var i = 0,l=elements.length ; i < l ; i++)来加速循环调用callback

若不是类数组,则使用for in来循环对每个属性调用callback

上述两个循环中一旦callback返回值为false即中断循环

最后返回值均为elements

$.map(elements, callback)

map函数和each函数的优化策略是一样的,只是map返回的是单一对象(elements.length <= 0)或一组数组(elements.length > 0),结果中存放遍历函数的运行结果

zepto.Z(dom, selector)

将dom的原型设为$.fn,以便返回值能调用$.fn的方法

zepto.isZ(object)

判断object的原型是否zepto.Z(zepto.Z.prototype = $.fn)

zepto.init(selector,context)

进入下述其中一条分支,按顺序依次判断

a.若!selector则返回空的zepto collection,也就是zepto.Z()

b.若selector是函数则在DOMContentLoaded后执行

c.若selector已经是Z对象,则返回selector本身

d.若非上述三种情况,则进入下述其中一条分支,按顺序依次判断

d1.若selector是Array,则dom=compact(selector)

d2.若selector是对象:

d21.若isPlainObject(selector)为true,则dom为selector的副本(浅复制)

d22.若isPlainObject(selector)为flase,则dom=selector

令selector = null;

d3.若selector符合fragmentRE(html片段),则dom为根据该片段生成的节点,令selector = null

d4.若存在context,则返回$(context).find(selector),也就是context中的selector节点,此时init函数已经结束

d5.若非上述情况,则dom=zepto.qsa(document, selector),也就是从document中查找符合selector的节点

若符合d1,d2,d3,d5则返回zepto.Z(dom,selector)

zepto.fragment(html, name, properties)

对html进行拓展(若html为"<div/>",则拆分闭合后为"<div></div>")

若name没定义,则通过正则表达式从html中获取name

若name不在containers中,则name = “*”

创建一个container,令其等于containers[name],并使其innerHTML=html;

dom = $.each(slice.call(container.childNodes), function(){
container.removeChild(this)
})

如果isPlainObject(properties)返回true,则另nodes=$(dom),并对nodes设置properties 这3行代码不仅使dom=slice.call(container.childNodes),还清空了container的内容,使container不受污染

最后,返回dom(此时dom是slice.call(container.childNodes), 并不是z集合)

$ = function(selector, context){
    return
zepto.init(selector, context)
  }

此处不直接使用$=zepto.init是因为要对$进行扩展而不会影响zepto.init

Zepto源码笔记(二)的更多相关文章

  1. Zepto源码笔记(一)

    最近在研究Zepto的源码,这是第一篇分析,欢迎大家继续关注,第一次写源码笔记,希望大家多指点指点,第一篇文章由于首次分析原因不会有太多干货,希望后面的文章能成为各位大大心目中的干货. Zepto是一 ...

  2. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  3. Tomcat8源码笔记(二)Bootstrap启动

    TOMCAT源码调试入口是Bootstrap类的main方法,我的启动参数VM: -Dcatalina.home=E:/Tomcat_Source_Code/apache-tomcat-8.0.53- ...

  4. Zepto源码笔记(三)

    ps:本文中"组装成成数组"指的是若元素个数大于1则返回数组,若元素只有1个则返回元素本身 以下函数是$.fn该对象的方法 ready(callback) 通过readyRE正则表 ...

  5. jQuery源码笔记——二

    jQuery选择这样返回对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, con ...

  6. Tomcat8源码笔记(三)Catalina加载过程

    之前介绍过 Catalina加载过程是Bootstrap的load调用的  Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...

  7. zepto源码--核心方法10(位置)--学习笔记

    今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...

  8. 一个普通的 Zepto 源码分析(二) - ajax 模块

    一个普通的 Zepto 源码分析(二) - ajax 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块,以 ...

  9. Zepto源码分析(二)奇淫技巧总结

    Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...

随机推荐

  1. 在centos中使用vim编辑器

    下面用编辑crontab举个例子: 在命令行输入 crontab -e 会直接进入vim编辑模式编辑crontab文件. 随后可以输入“i”进入insert模式 然后移动光标在指定的位置添加文字,可以 ...

  2. JavaScript常用

    打印日志 console.log 类型判断 第一种方式var type = Object.prototype.toString.call(list);console.log(type);第二种方式ty ...

  3. 创建Windows服务(Windows Services)N种方式总结

    最近由于工作需要,写了一些windows服务程序,有一些经验,我现在总结写出来.目前我知道的创建创建Windows服务有3种方式:a.利用.net框架类ServiceBaseb.利用组件Topshel ...

  4. Android中如何利用attrs和styles定义控件

    一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我设置了一个TextView,给它设置了 textColor,它就能够改变这个TextView的文本的 ...

  5. .OCX、.dll文件注册命令Regsvr32的使用

    1.打开文件,打开需要注册的OCX文件或dll文件,2.然后根据需要进行OCX文件或DLL文件的注册和反注册 DLL.OCX注册方法--文件Regsvr32用法及情况介绍 使用过activex的人都知 ...

  6. delphi客户端调服务器端的java webservice如何在参数中传对象? 转

    我试过java返回一个对象到delphi端没问题,可反过来,delphi通过参数传一个对象到java,java端得到的对象值变为空,不知道是不是delphi这边设置或者对象注册方面有问题,究竟该怎么解 ...

  7. 2014-07-23 .NET实现微信公众号接入

    今天是在吾索实习的第11天.今天我跟我的实习小组的组员们,解决了关于使用ASP.NET进行微信公众号接入的问题.因为我们小组成员也是刚接触微信公众号的二次开发,所以在解决该问题的工程中也走了不少弯路. ...

  8. Java---设计模式app小软件汇总应用

    写了一个app小软件,重点不在于软件,软件bug挺多,也没去修改. 这个小软件只是为了更好的说明和了解设计模块而做的. Java 程序设计–包结构 Java程序设计的系统体系结构很大一部分都体现在包结 ...

  9. HDOJ 1194 Beat the Spread!(简单题)

    Problem Description Superbowl Sunday is nearly here. In order to pass the time waiting for the half- ...

  10. hdu5136:组合计数、dp

    题目大意: 求直径长度为N的无根二叉树的个数(同构的只算一种) 分析: 分析发现直径长度不好处理!因此考虑把问题转化一下: 假设要求直径为N的二叉树 (1) 若N为偶数,将树从直径中点的边断开,则分成 ...