ES6学习笔记八:类与继承

一:Class

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

创建类对象:使用new命令即可。

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

类定义不存在变量提升(hoist),所以如果在定义类定义之前使用new创建类对象,就会报错。

getter和setter函数:使用set、get关键字即可

class MyClass {
  constructor() {
    // ...
  }
  get 属性名() {
    return 属性值;
  }
  set 属性名(value) {
    this.属性=value;
  }
}

let inst = new MyClass();

inst.属性名 = 值;//调用setter

inst.属性名;//调用getter

生成器函数:

某个方法之前加上星号(*),就表示该方法是一个 Generator 函数。

静态方法:

如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

二:继承

Class 可以通过extends关键字实现继承。

子类必须在constructor方法中调用super方法,否则新建实例时会报错。

super关键字的两种调用:

第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数z必须执行一次super函数。

constructor() {
    super();
  }

第二种情况,super作为对象时,在普通方法中,充当父类对象,调用父类中的属性与方法。

func() {
   super.xxx;
  }

三:原生数据结构的继承

ECMAScript 的原生构造函数大致有下面这些。

  • Boolean()
  • Number()
  • String()
  • Array()
  • Date()
  • Function()
  • RegExp()
  • Error()
  • Object()

ES6 可以自定义原生数据结构(比如ArrayString等)的子类,使用extends关键字继承即可。

因此可以在原生数据结构的基础上,定义自己的数据结构。

四:Mixin

将多个类的接口“混入”(mix in)另一个类。

可以定义一个类,在其中引入其它类的方法们。

原文地址:https://www.cnblogs.com/ygj0930/p/7248611.html