• 欢迎大家分享资料!前往留言板评论即可!

ECMAScript(ES6)基本语法介绍(四)

合宙 模组资料网 2年前 (2021-05-15) 321次浏览 0个评论 扫描二维码
文章目录[隐藏]

8.Iteratorfor...of 循环

  1. 基本概念
  • 在ES6中新增加了Set和Map两种数据结构,再加上js之前原有的数组和对象,这样就有了四种数据集合,平时还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象等。这样就需要一种统一的接口机制,来处理所有不同的数据结构。

  • Iterator :这就是一种机制,它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署在Iterator 接口,就可以完成遍历操作,而且这种遍历操作是依次处理该数据结构的所有成员。

  • Iterator遍历器的作用

    :

    • 为各种数据结构,提供一个统一的、简便的访问接口。
    • 使得数据结构的成员能够按某种次序排列。
    • ES6新增了遍历命令for...of循环,Iterator接口主要提供for...of消费。
  1. 手写Iterator接口
    const arr = [1, 2, 3];
    function iterator(arr){
     let index = 0;
     return {
       next: function(){
         return index < arr.length ? {value: arr[index++], done: false} : {value: undefind, done: true};
       }
     }
    }
    const it = iterator(arr);
    console.log(it.next()); // 打印结果{value:1, done:false}
    console.log(it.next()); // 打印结果{value:2, done:false}
    console.log(it.next()); // 打印结果{value:3, done:false}
    console.log(it.next()); // 打印结果{value:undefind, done:true}
    
  • Iterator

    的遍历过程:

    • 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
    • 第一次调用指针对象的next()方法,可以将指针指向数据结构的第一个成员。
    • 第二次调用指针对象的next()方法,指针就指向数据结构的第二个成员。
    • 不断调用指针对象的next()方法,直到他指向数据结构的结束位置。
    • 每一次调用next()方法,都会返回数据结构的当前成员信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
  • 凡是具有Symbol.iterator 属性的数据结构都具有 Iterator 接口

  • 凡是具有Symbol.iterator 属性的数据结构都可以进行解构赋值和使用扩展运算符...

9.class语法

  1. 基本概念:JS语言的传统方法是通过构造函数,定义并生成新的对象,是一种基于原型的面向对象系统。这种写法跟传统的面向对象语言(比如C++和Java)差异很大,很容易让新学这门语言的人感到困惑。所以在ES6中新增加了类的概念,可以使用class 关键字声明一个类,之后以这个类来实例化对象。

  2. 实例

    class Miaov {
     constructor(a, b){
       this.a = a;
       this.b = b;
       return this;
     }
     print(){
       console,log(this.a + ' ' + this.b );
     }
    };
    const miavo = new Miaov ('hello', 'world').print(); // 输出结果:hello world
    consoe.log(typeof Miaov); // 打印结果:function
    
  • Miaov 中的constructor方法是构造方法,this 关键字则代表实例对象。也就是说,ES6的构造函数,对应Miaov 这个类的构造方法。

  • Miaov 这个类除了构造方法,还定义了一个print 方法。注意,定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去就可以了。另外,方法直接不需要逗号分隔,加了会报错。

  • 构造函数的 prototype属性,在ES6的类上面继续存在。而且类的所有方法都定义在类的 prototype的属性上

    “`
    console.log(Miaov.prototype);
    “`

  • 定义在类中的方法都是不可以枚举的。

    “`
    console.log(Object.keys(Miaov.prototype));
    “`

  • constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor 方法,如果没有显示定义,一个空的 constructor 方法会被默认添加。

  • 生成类的实例对象的写法,与ES5完全一样,也是使用new命令。如果忘记加上new,像函数那样调用Class,将会报错。

  1. 继承
  • 案例

    “` html





    Document





    “`

  • 说明

    • 子类继承父类 使用extends 关键字

    • 为父类指定静态方法,使用 static 方法名字

    • super

      • 在构造函数中可以当做一个函数来使用,相当于调用父类的构造函数。
      • 在原型方法中,可以当做一个对象来使用,相当于父类的原型对象,并且会自动绑定this到子类上。

转载请注明原文链接:ECMAScript(ES6)基本语法介绍(四)
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址