ES6 Class类
程序员文章站
2022-03-20 11:38:08
...
定义
在ES6中,class本质上就是function。
类声明
类声明的方式有两种,如下
-
匿名类
let obj = class{ constructor(name){ this.name = name; } }
-
命名类
let obj = class Example { constructor(name){ this.name = name; } }
注意要点:
- constructor 方法是类的默认方法,创建类的实例化对象时被调用。constructor 方法用于定义初始化类的参数
- 类不可以重复声明
- 类定义不会被提升,必须在访问前对类进行定义,否则就会报错。
- 类中方法不需要 function 关键字,方法之间不需要逗号隔开。
类的实例化
-
new
class 的实例化必须通过 new 关键字。如下图
注意要点:
- class 实例化的相同对象都是共享同一个原型对象。如下图
封装与继承
-
extends
class 类通过 extends 实现类的继承。class Child extends Father { //属性/方法 }
注意要点:
- 子类 constructor 方法中必须有 super,且必须出现在 this 之前。
- 调用父类构造函数,只能出现在子类的构造函数。
- super 在普通方法中,指向父类的原型对象。在静态方法中,指向父类。
- 常规对象不可以被继承,但可以使用
Object.setPrototypeOf()
解决。
-
getter / setter
在 class 中使用 getter / setter 进行属性的封装,如下图
注意要点:- getter 不可单独出现。
- getter 与 setter 必须同级出现,或者全部放在子类中。
- 在 getter / setter 中使用 this.a 赋值或者取值则会一直递归调用,直至报错。