KolaDecember. 2022-07-02 10:36 采纳率: 64.7%
浏览 31
已结题

迭代器 let this1=this;为什么要这么用


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //声明一个对象
        const banji={
            name:"终极一班",
            stus:[
                'xoapming',
                'fdefg',
                'xiaohaong'
            ],
            [Symbol.iterator](){
                //索引变量
                let index=0;
                let this1=this;
                return {
                    next:function(){
                        if(index<this1.stus.length){
                            const result={value:this1.stus[index],done:false};
                            index ++;
                            return result;
                        }else{
                            return {value:undefined,done:true}
                        }
                       
                    }
                };
            }
        }
        for(let v of banji){
            console.log(v);
        }
    </script>
</body>
</html>

请问为什么要 let this1=this; 有什么作用吗? 不用这个为什么会报错?

  • 写回答

4条回答 默认 最新

  • 林一怂儿 前端领域新星创作者 2022-07-02 12:07
    关注

    img


    不想使用这种方式,可用使用箭头函数。

    img

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <script>
            //声明一个对象
            const banji = {
                name: "终极一班",
                stus: [
                    'xoapming',
                    'fdefg',
                    'xiaohaong'
                ],
                [Symbol.iterator]() {
                    //索引变量
                    let index = 0;
                    // let this1 = this;
                    return {
                        next: () => {
                            if (index < this.stus.length) {
                                const result = { value: this.stus[index], done: false };
                                index++;
                                return result;
                            } else {
                                return { value: undefined, done: true }
                            }
    
                        }
                    };
                }
            }
            for (let v of banji) {
                console.log(v);
            }
        </script>
    </body>
    
    </html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月13日
  • 已采纳回答 7月5日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line