iterator 迭代器

目录

iterator迭代器的用法

迭代器的语法糖

给对象部署迭代器


  • 在ES6中 我们学过了 ...拓展运算符 拓展运算符能拓展的 是带有iterator迭代器的数据

iterator迭代器的用法

  • //1.创建迭代器对象
    //具备迭代器的数据 都会有一个方法 Symbol.iterator 
    //这个方法的返回值是 迭代器对象 
    //因此 我们这里 就获取返回值 得到迭代器对象
    let 迭代器对象变量名 = 具备迭代器的数据[Symbol.iterator]()
    
    //2.迭代器对象 具备一个方法 next 可以一步一步的循环指定的数据
    //next方法 会将迭代器对象 循环出来的值 返回出来
    console.log(迭代器对象变量名.next())
    
    //{value:本次循环的结果,done:数据循环是否结束 结束为true 没结束为false}

    迭代器的语法糖

    for of
    for(let 值变量 of 要循环的数据(带有迭代器)){
        //循环体代码
        //值变量 就表示 每一次 迭代器循环出来的结果
    }

    给对象部署迭代器

    //什么是迭代器呢  其实迭代器 就是一个方法 Symbol.iterator 数据调用这个方法 就可以生成迭代器对象从而实现 循环效果
    
            //对象本身 没有这个方法  我们如果想给对象部署迭代器 其实就是给对象添加这个方法
            //为了让所有对象 都能用到迭代器方法  我们将迭代器方法Symbol.iterator 添加到原型链的终点 Object.prototype
    
            Object.prototype[Symbol.iterator] = function(){
                //this--->被循环的对象
                let that = this;
                //获取到被循环的对象中 所有的属性值
                let valArr = Object.values(this);//valArr就是被循环的对象中的所有属性值组成的数组
                //声明一个变量 记录当前索要循环的索引
                let idx = -1
                //这个方法 应该返回一个迭代器对象
                let iterator =  {
                    //迭代器对象中具备一个方法 next 用来循环指定数据
                    next(){
                        idx++;
                        //next方法返回了一个对象——{value:本次循环的属性值,done:false/true}
                        if(idx<valArr.length){
                            return {
                                value:valArr[idx],
                                done:false
                            }
                        }else{
                            return {
                                value:valArr[idx],
                                done:true
                            }
                        }
                        
                    }
                }
                return iterator;
            }
    
            let obj = {
                name:"张三",
                age:18
            }
            let it = obj[Symbol.iterator]();
            console.log(it.next());
            console.log(it.next());
            console.log(it.next());
    
            for(let val of obj){
                console.log(val)
            }
    
            console.log(...obj)
    
            let obj1 = {
                name:"李四",
                age:19,
                gender:"男"
            }
            console.log(...obj1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值