博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2021/11/05

Posted on 2021-11-05 23:57  为你摘星星  阅读(36)  评论(0)    收藏  举报

一、迭代器

  1.for in遍历:

    遍历数组时,数组元素为Symbol类型的值可输出在Console中;遍历对象时,key为Symbol值时,输出key在Console中不显示,输出value可以显示这是为啥?

    答:底层的具体原因暂时不清楚,但是这样会导致Symbol类型的属性值无法遍历,JSON.stringfy(obj)是Symbol属性会被排除在外。

    获取Symbol属性的办法:1.Object.getOwnPropertySymbols(obj)   2.  Reflect.ownKeys(obj)      但是这两个方法具体怎么实现的不清楚,有待学习!!!

  2.iterator接口:

    是指对象中有一个为Symbol.iterator(是一个类型为Symbol的值)的属性,该属性的值为一个方法,调用该方法后会返回一个对象。该对象上有一个next方法,指针自动指向第一个数据成员,并返回一个有                value属性和done属性的对象。

  3.对对象布置iterator接口,实现自定义遍历:        

         let obj = {
            team: 'GGG',
            teammember: ['牛', '猪', '狗', '羊'],   //若该属性为一个对象,则如何写?
            [Symbol.iterator]() {
                let index = 0;
                _this = this;  //此时该方法中的  this指向    obj,但是返回的对象中的  this 指向的不是  obj  所以要在外部保存一个 _this     或者将  next 方法写成加箭头函数
                return {
                    next() {
                        if (index < _this.teammember.length) {
                            const result = {
                                value: _this.teammember[index],
                                done: false
                            };
                            index++;
                            return result;
                        } else {
                            return { value: undefined, done: true };
                        }
                    }
                }
            }
        }
        for (let v of obj) {
            console.log(v);
        }

 二、生成器:生成器其实就是一个特殊的函数,解决异步编程的一种方案 

  

   生成器函数的特点:

       

   生成器函数的实际利用:

       

三、promise (解决异步编程的一种方式,语法上是一个构造函数)

       

       

  Promise对象的链式调用:

  

   Promise.catch()语法糖:用于执行失败的回调