一: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 可以自定义原生数据结构(比如Array
、String
等)的子类,使用extends关键字继承即可。
因此可以在原生数据结构的基础上,定义自己的数据结构。
四:Mixin
将多个类的接口“混入”(mix in)另一个类。
可以定义一个类,在其中引入其它类的方法们。