class类

JS里的类就是构造函数的语法糖

基本用法
  1. 类里面有个constructor函数,可以接收传递过来的参数,同时返回实例对象
  2. constructor函数只要new生成实例时,就会自动调用这个函数,如果我们不写这个函数,类也会自动生成这个函数
  3. 公共属性放在constructor中,公共方法直接在类里面写函数声明,会自动添加至原型对象中
  4. class类没有变量提升,所以必须先定义类,才能通过类实例化对象
  5. super()调用父类里的constructor方法,可以向里面传参,就等于Father.call(this,x,y),super 必须在子类的this前面调用
  6. class里面的方法的this指向的是调用者,如果调用者不是类的实例,就需要改变this的指向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Person {
 constructor(age) {
   // 属性
   this.myName = '刘逍'
   this.age = age
}
 // 静态方法
 static print() {
   console.log()
}
 // 访问器
 get myName() {
   console.log('getter')
   return this.myName
}
 set myName(v) {
   console.log('setter' + v)
}
 setName(v) {
   this.myName = v
}
}

关键词

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

super

super这个关键字,既可以当作函数使用,也可以当作对象使用。
super作为函数调用时,代表父类的构造函数。子类的构造函数必须执行一次super函数。super虽然代表了父类A的构造函数,但是返回的是子类B的实例
super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。

getter、setter
在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

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

私有属性

ES2022正式为class添加了私有属性,方法是在属性名之前使用#表示。私有属性只能在类的内部使用(this.#count)。如果在类的外部使用,就会报错。