zoukankan      html  css  js  c++  java
  • zepto源码--核心方法(类数组相关)--学习笔记

    从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法。即$.fn={}里面的所有方法的介绍。会配合zepto的API进行介绍。

    其实前面已经介绍了几个,如width,height,prepend等等,今天开始的是zepto源码里面,明确的封装在$.fn对象里面的方法。

    本篇介绍的是与类数组(NodeList)操作相关的各种方法:

    forEach,reduce,push,sort,splice,indexOf,concat,map,slice,toArray,each,filter,not

    插上一句,关于$.fn对象最前面的两个属性

    constructor:zepto.Z是为了确保zepto创建的对象,constructor都指向zepto.Z

    length:0是为了解决在低版本ie中对象冒充时,ie浏览器不能提供的特性。

    forEach,reduce,push,sort,splice,indexOf这6个函数,完全是调用ECMAScript中有关数组的原生函数,不做过多解释,需要更多了解的话,可以自行了解。

    concat: 

    添加元素到一个Zepto对象集合形成一个新数组。如果参数是一个数组,那么这个数组中的元素将会合并到Zepto对象集合中。

    这里有两个函数调用需要注意

    value.toArray(),这个方法是在后面介绍了的,调用get方法直接将zepto对象转换为dom对象。

    另外一个就是return concat,这个concat是前面定义的变量 concat = emptyArray.concat,是数组原生方法,千万不能与我们自定义的函数concat相混淆。

    slice:

    提取这个数组array的子集,从start开始,如果给定end,提取从从start开始到end结束的元素,但是不包含end位置的元素。

    调用数组原生函数,提取nodeList的子集,然后包装成zepto对象返回。这里函数内部的slice也是前面定义的变量slice = emptyArray.slice.

    filter: 

    过滤对象集合,返回对象集合中满足css选择器slelctor的项。如果参数为一个函数,函数返回有实际值得时候,元素才会被返回。在函数中, this 关键字指向当前的元素。

    如果传入的参数为函数,则调用not方法实现,this.not(this.not(selector)),通俗点讲:就是负负得正,所以使用了两个this.not

    非函数情况下,调用zepto.matches判断当前的元素是否匹配传入的参数,如果匹配就返回。

    not:

    过滤当前对象集合,获取一个新的对象集合,它里面的元素不能匹配css选择器。如果另一个参数为Zepto对象集合,那么返回的新Zepto对象中的元素都不包含在该参数对象中。如果参数是一个函数。仅仅包含函数执行为false值得时候的元素,函数的 this 关键字指向当前循环元素。

    如果传入的参数为函数,则对匹配的zepto对象(如:$('li'))遍历,调用传入的函数,如果selector.call(this, idx)==false时,表示,当前遍历到的选项不符合selector函数,则把当前项存入数组nodes。

    如果传入的参数不是函数,正好可以利用与not函数功能完全相反的filter函数来实现,获得能够匹配选择器的选项赋值给excludes,遍历选取的zepto对象(如:$('li')),如果

    excludes中不存在遍历到的当前的选项el,则将el存入数组nodes,最后将nodes包装成zepto对象并返回出来。

    map:

    遍历对象集合中的所有元素。通过遍历函数返回值形成一个新的集合对象。在遍历函数中this关键之指向当前循环的项(遍历函数中的第二个参数)。

    遍历中返回 nullundefined,遍历将结束。

    基本上就是实现了原生数组函数map的zepto对象包装,重点是会形成新的数组返回。

    each:

    遍历一个对象集合每个元素。在迭代函数中,this关键字指向当前项(作为函数的第二个参数传递)。如果迭代函数返回 false,遍历结束。

    这个主要是在函数内部对遍历到的元素进行处理,不会返回新的数组,return this的目的是保持连缀。

    对类数组相关方法的实现,利用到了很多数组原生函数,所以如果需要对这块进行更深刻的了解的话,可以更深入的了解一下数组的原生函数。

  • 相关阅读:
    centos下使用yum 安装pip
    什么叫对象引用对象
    变量,id()
    语法错误
    闭包,装饰器
    位运算&,逻辑与and
    for XX in XX结构
    Python中的部分特殊属性
    利用键盘实现橡皮筋技术
    hdu Random Sequence
  • 原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/6049818.html
Copyright © 2011-2022 走看看