ES6 Iterator接口的部署

 //对象上默认没有部署iterator接口
        let obj1 = {}

        //如何将Iterator接口部署到目标对象上
        //Symbol.iterator =>指向对象的默认遍历器方法
        let obj2 = {
            data: ["hello", "world"],
            [Symbol.iterator]: function () {
                let self = this
                let index = 0
                return {
                    next: function () {
                        if (index < self.data.length) {
                            return { value: self.data[index++], done: false }
                        } else {
                            return { value: undefined, done: true }
                        }
                    }
                }
            }
        }

        for (let v of obj2) {
            console.log(v)
        }


        //原生就具备Itertor接口的数据结构
        //Array、Map、Set、String、函数中arguments
        //当数据结构中已部署上Itertor接口,我们就可以使用For...of来进行遍历
        let arr = ["a", "b", "c"]
        let iterator = arr[Symbol.iterator]()

        console.log(iterator.next())
        console.log(iterator.next())
        console.log(iterator.next())
        console.log(iterator.next())

        for (let v of arr) {
            console.log("array", v)
        }

        let set = new Set(["java", "javascript", "html5"])
        for (let v of set) {
            console.log("set", v)
        }

        let str = "hello es6"
        for (let v of str) {
            console.log("str", v)
        }

        //调用Iterator接口的其他场合
        //解构赋值
        let [first, ...rest] = set
        console.log("first", first)
        console.log("rest", rest)

        //扩展运算符
        console.log([...str])

posted @ 2021-02-26 11:07  abcdefgab  阅读(41)  评论(0)    收藏  举报