zoukankan      html  css  js  c++  java
  • ES6的Iterator,jquery Fn

    ES6的Iterator对象详解

    Iterator实现原理

    1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

    2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

    3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

    4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

    每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

    ES6 里的迭代器并不是一种新的语法或者是新的内置对象(构造函数), 而是一种协议,所有遵循了这个协议的对象都可以称之为迭代器对象,所以说迭代器是一种协议,一个统一的接口标准,两个属性都不返回值也不会报错,但是不符合协议标准了,就不能称作迭代器了

    如何部署Iterator接口

    在ES6中,有三类数据结构原生具备Iterator接口: 数组、某些类似数组的对象、Set和Map结构 ,对象(Object)之所以没有默认部署Iterator接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。

    Iterator接口部署在对象的 Symbol.Iterator 属性上, 可以调用这个属性,就得到遍历器对象。

         var arr = ['a', 'b', 'c'];
         var iterator = arr[Symbol.iterator]();
         var a = iterator.next();
         console.log(a)   //{value: 'a', done: false}

    for–of与for–in

    for...in 遍历每一个属性名称,而 for...of遍历每一个属性值。

    在对象没有部署Iterator接口的情况下调用for…of会报错。当一个部署了Iterator接口的对象调用for…of时,实现的步骤是这样的:

    1. 调用对象的Symbol.Iterator的属性获得遍历器生成函数;

    2. 调用遍历器生成函数返回遍历器对象其实for…of就相当于一直调用遍历器对象的next方法,直到返回done为true;

    Jquery 的Fn

    jquery的fn 就添加了一个迭代器,fn实际上是一个对象。

    if (typeof Symbol === "function") {
            jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
        }
  • 相关阅读:
    畅通工程(hdu1232)并查集
    qsort函数的用法
    二叉搜索树(hdu3791)
    Binary Tree Traversals(HDU1710)二叉树的简单应用
    Safe Or Unsafe(hdu2527)哈弗曼VS优先队列
    山东省第四届acm解题报告(部分)
    Points on Cycle (hdu1700,几何)
    A计划 hdu2102(bfs一般题)
    杀人游戏(hdu2211)插入法
    hdu1518 Square(dfs)
  • 原文地址:https://www.cnblogs.com/btgyoyo/p/6218904.html
Copyright © 2011-2022 走看看