前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript对象怎么实现迭代(iterator)功能?

JavaScript对象怎么实现迭代(iterator)功能?

原创
作者头像
Learn-anything.cn
发布2021-12-20 16:00:20
2170
发布2021-12-20 16:00:20
举报
文章被收录于专栏:learn-anything.cnlearn-anything.cn
一、迭代功能是什么?

可迭代对象, 需要具备 Symbol.iteratornext 这两个函数,即可用 for...of 进行迭代。譬如:String、Array、TypedArray、Map 和 Set,都是可迭代对象。

代码语言:txt
复制
var myIterator = {
    next: function() {
        // ...
    },
    [Symbol.iterator]: function() { return this }
}

二、怎么用?
1、转换 class 为迭代对象
代码语言:txt
复制
<!DOCTYPE html>
<html lang='zh-CN'>

<head>
    <meta charset="utf-8">
    <title>Symbol</title>
    <script>
        class SimpleClass {
            constructor(data) {
                this.data = data
            }

            [Symbol.iterator]() {
                let index = 0;
                return {
                    next: () => {
                        if (index < this.data.length) {
                            return { value: this.data[index++], done: false }
                        } else {
                            return { done: true }
                        }
                    }
                }
            }
        }

        const simple = new SimpleClass([1, 2, 3, 4, 5])

        for (const val of simple) {
            console.log(val)   //'1' '2' '3' '4' '5'
        }

    </script>
</head>

<body>
    <h1>Symbol : 打开 Console 看结果!</h1>
</body>

</html>

2、转换 object 为迭代对象
代码语言:txt
复制
<!DOCTYPE html>
<html lang='zh-CN'>

<head>
    <meta charset="utf-8">
    <title>Symbol</title>
    <script>
        let SimpleClass = {
            data: [1, 2, 3, 4, 5],
            [Symbol.iterator]() {
                let index = 0;
                return {
                    next: () => {
                        if (index < this.data.length) {
                            return { value: this.data[index++], done: false }
                        } else {
                            return { done: true }
                        }
                    }
                }
            }
        }

        for (const val of SimpleClass) {
            console.log(val)   //'1' '2' '3' '4' '5'
        }

    </script>
</head>

<body>
    <h1>Symbol : 打开 Console 看结果!</h1>
</body>

</html>

三、参考文章

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、迭代功能是什么?
  • 二、怎么用?
    • 1、转换 class 为迭代对象
      • 2、转换 object 为迭代对象
      • 三、参考文章
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档