迭代器接口

在ES6中,只实现了迭代器接口(Symbol.iterator),并没有实现迭代器接口类,有四种情况会实现迭代器接口
  1 使用迭代器接口方法的时候,如keys, values, entries等
  2 在解构的时候
  3 在创建map,set对象的时候
  4 在使用for of循环的时候
迭代器的作用:
  1 定义了我们访问数据的次序
  2 为for of提供了访问数据的方式
  3 让所有数据具备统一的接口,方便而快捷的获取数据
注意:类数组对象实现了迭代器接口, 对象没有实现迭代器接口
 
实现迭代器接口:
<script>
    // 实现迭代器接口 即可通过for of方法 又可以通过next方法遍历的迭代器
    var obj = {
        0: 'red',
        1: 'green',
        2: 'blue',
        // 具备length
        length: 3,
        // 具备索引值
        index: 0,
        // 复用数组的迭代器接口
        // 具备Symbole.iterator
        [Symbol.iterator]: Array.prototype[Symbol.iterator],
        // 具备next
        next() {
            // 按照一定的顺序访问数据
            if(this.index < this.length) {
                // 返回数据
                return {value: obj[this.index++], done: false}
            } else {
                // 遍历完成了
                return {value: undefined, done: true}
            }
        }
    };

    console.log(obj);
    // 测试
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    
    // 没有实现迭代器接口,不能使用for of循环
    for(let item of obj) {
        console.log(item)
    }
    </script>
原文地址:https://www.cnblogs.com/yess/p/13130182.html