JS class类实现继承

233 阅读2分钟

实现继承

在ES6中新增了使用extends关键字,可以方便的帮助我们实现继承:

extends关键字用来创建一个普通类或者内建对象的子类。

继承的.prototype必须是一个Object 或者 null

class Boy {}

class  Juvenile extends Boy {}

super关键字的使用?

super 的具体作用当子类继承父类时,需要调整修改父类的方法时

super([arguments]);
// 调用 父对象/父类 的构造函数

super.functionOnParent([arguments]);
// 调用 父对象/父类 上的方法

在子(派生)类的构造函数中使用this或者返回默认对象之前,必须先通过super调用父类的构造函数!

super的使用位置有三个:子类的构造函数、实例方法、静态方法;

  • 子类的构造函数中 首先定义一个Boy类
class Boy {
  constructor(name, age) {
    this.name = name
    this.age = age
  }

  running() {
    console.log(this.name + " running~")
  }

  eating() {
    console.log(this.name + " eating~")
  }

  personMethod() {
    console.log("你好呀")
    console.log("你好呀呀")
    console.log("你好呀呀呀")
  }

  static staticMethod() {
    console.log("我是静态的")
  }
}

再定义一个Juvenile类去继承Boy

使用super(),并且传入继承父类的参数name, age

class Juvenile extends Person {
  
  constructor(name, age, sno) {
    super(name, age)
    this.sno = sno
  }

}

  • 子类实例方法中

第一种方式可以直接去修改父类的方法,重新写父类方法

class Juvenile extends Person {
  
studying() {
    console.log(this.name + " studying~")
  }

}

第二种方式复用父类中逻辑方法并且添加方法

class Juvenile extends Person {
  
personMethod() {
    super.personMethod()
    console.log("好好好")
  }
}

  • 子类静态方法中 直接在静态方法中重写父类逻辑方法
class Juvenile extends Person {
  
static staticMethod() {
    super.staticMethod()
    console.log("StudentStaticMethod")
  }
}
}

总结:

  1. 如果子类继承了父类,且父类中写了构造器,那么父类构造器中的super是必须要调用的
  2. 类中所定义的方法,都是放在了类的原型对象上,供实例去使用

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情