首页 > Web开发 > 详细

JS中自定义迭代协议

时间:2020-04-12 11:52:09      阅读:53      评论:0      收藏:0      [点我收藏+]
   /*
            迭代对象
                实现了迭代器的对象
                迭代器:方法 [Symbol.iterator]
        */

        


        var obj = {
            left: 100,
            top: 200
        };

        // 迭代协议
        obj[Symbol.iterator] = function() {
            let keys = Object.keys(obj);    //[‘left‘,‘top‘]
            let len = keys.length;
            let n = 0;
            

            return {
                next: function() {

                    if (n < len) {
                        return {
                            value: {k: keys[n], v: obj[keys[n++]]},
                            done: false
                        }
                    } else {
                        return {
                            done: true
                        }
                    }
                }
            }
        }
        
        // obj[Symbol.iterator]().next() => {done: true}
        for (var {k, v} of obj) { //of 是一个可迭代的对象
            console.log(k, v);
        }
for of可以迭代实现了迭代协议的对象,每一次循环会执行迭代对象的迭代协议
obj[Symbol.iterator]().next()
应该又是抄的python的迭代器概念。
可以在next函数种定义你想要的迭代方式,返回值done如果是true的时候将停止迭代
value定义每次迭代拿到的内容!

JS中自定义迭代协议

原文:https://www.cnblogs.com/tengx/p/12683934.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!