迭代器Iterator

        // 我的需求是遍历出data中的persons数据,这个时候可以考虑迭代器
        // 迭代器原理:
        // (1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
        // (2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
        // (3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
        // (4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。
        const data = {
            name: '应用',
            persons: [
                'UZI',
                'MLXG',
                'XIAOMING',
                'LETME',
                'XIAOHU'
            ],
            [Symbol.iterator]() {
                //原理1:创建一个指针对象
                let index = 0;
                return {
                    //对象中存在next方法
                    next: () => {// ()=>箭头函数保证this指向的是data
                        //不断调用next方法,直到结束
                        if (index < this.persons.length) {
                            const result = { value: this.persons[index], done: false };
                            index++;
                            return result;
                        } else {
                            return { value: undefined, done: true }
                        }
                    }
                }
            }
        }
        //完成了data [Symbol.iterator]方法的定义之后重新遍历,即实现最初的需求
        for (let i of data) {
            console.log(i);// UZI MLXG XIAOMING LETME XIAOHU
        }

关于 Symbol :https://www.runoob.com/w3cnote/es6-symbol.html

ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

ES6 数据类型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还新增了 Symbol 。

原文地址:https://www.cnblogs.com/zhh-blogs/p/15556737.html