实现继承
在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")
}
}
}
总结:
- 如果子类继承了父类,且父类中写了构造器,那么父类构造器中的super是必须要调用的
- 类中所定义的方法,都是放在了类的原型对象上,供实例去使用
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情