JS详解-迭代器模式详解两种方法实现

前言:

javascript 复制代码
        // 迭代协议可以定制对象的迭代行为-分为两个协议:可迭代协议、迭代器协议
        // 可迭代协议:增加方法[Symbol,=.iterator](){}(属性名表达式)返回符合协议器的对象
        // 迭代器协议:有next方法的对象,next方法返回:
        // 已结束:{done:true}
        // 继续迭代:{done:false,value:'x'}
        // 可以使用Generator或自己实现对象,next

Generator法:

javascript 复制代码
   <script>
        const obj = {
            // Symbol.iterator 内置常量
            //[属性名表达式](){}
            [Symbol.iterator](){
               // 手写
               const arr = [1,2,3,4,5]
                let index = 0
                return {
                    next(){
                        if(index < arr.length){
                            // 可以继续迭代
                            return {
                                done:false,
                                value:arr[index++]
                            }
                        }else{
                            return {
                                // 已结束
                                done:true
                            }
                        }
                    }
                }
            }
        }
        for(const iterator of obj){
            console.log('iterator',iterator)
        }
    </script>

手写使用next和对象:

javascript 复制代码
   <script>
        const obj = {
            // Symbol.iterator 内置常量
            //[属性名表达式](){}
            [Symbol.iterator](){
                // 使用Generator
                function* gen(){
                    yield 1
                    yield 2
                    yield 3
                    yield 4
                    yield 5
                }
                return gen()
            }
        }
        for(const iterator of obj){
            console.log('iterator',iterator)
        }
    </script>
相关推荐
盛世宏博北京10 分钟前
十二防档案库房总线架构设计:恒湿消毒净化一体机 RS485 组网实战笔记
开发语言·笔记·php·恒湿机·档案八防温湿度
幼儿园蛋小黑15 分钟前
SPI 子系统:从原理到实践
java·前端·数据库
雪雪爱冲浪22 分钟前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
Data analyse45629 分钟前
rrweb回放事件资源加载顺序重放校验
前端·人工智能·算法·机器学习·数据分析
软件技术NINI29 分钟前
化妆品html+css+js 7页
javascript·css·html
要吃这碗饭38 分钟前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
czq_268671948739 分钟前
Python打卡第40天
开发语言·python
yangmu320341 分钟前
Unity 开发过程与底层原理
java·开发语言
不爱吃鱼的蔓热莓42 分钟前
Autosar之根据ARXML中报文信息生成SWC(二)
开发语言·python
lexiangqicheng44 分钟前
自定义表单跨端共用机制-PC设计APP渲染
java·前端·javascript