这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战
类的继承
一、实现类的继承
extends 关键字用于类声明或者类表达式中,以创建一个类,该类作为另一个类的子类。
class ChildClass extends ParentClass {...}
extends 关键字用来创建一个普通类或者内建对象的子类。
值得注意的是,继承的 .prototype 必须是一个 Object 或者 null。
示例代码如下:
class Parent {
//构造器
constructor() {
this.name = 'parent';
this.sayMe = function () {
console.log('this is sayme.');
}
}
// 普通方法
sayYou(){
console.log('this is sayyou');
}
// 静态方法
static staticMethod (){
console.log('this is static method');
}
}
// 声明 Child 类时,指定Child类作为Parent类的子类
class Child extends Parent{
constructor() {
super();//super指向当前子类的父类的构造器
this.age = 19;
}
}
let child = new Child();
console.log(child);
Child.staticMethod();
二、继承与内置对象
JavaScript常见内置对象:
- String对象:字符串对象,提供了对字符串进行操作的属性和方法。
- Array对象:数组对象,提供了数组操作方面的属性和方法。
- Date对象:日期时间对象,可以获取系统的日期时间信息。
- Boolean对象:布尔对象,一个布尔变量就是一个布尔对象。(没有可用的属性和方法)
- Number对象:数值对象。一个数值变量就是一个数值对象。
- Math对象:数学对象,提供了数学运算方面的属性和方法。
- Object对象、RegExp对象、 Global对象、Function对象。
如下示例代码所示,实现了继承内置的 Date 对象。
class myDate extends Date{
constructor() {
super();
}
getFormattedDate(){
var months = [ ' Jan' , 'Feb','Mar','Apr','May',' Jun',
'Jul','Aug' , 'Sep', '0ct', 'Nov', 'Dec'];
return this.getDate() + '-' + months[this.getMonth()] +
'-' + this.getFullYear();
}
}
let date = new myDate();
console.log(date.getFormattedDate());//12-Nov-2021
三、super 关键字
super 关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。
-
super 关键字当作函数使用时,代表父类的构造函数。ECMAScript 6 要求子类的构造函数必须执行一次 super 函数。
值得注意的是,super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即 super 内部的this 指的是B,因此 super()在这里相当A.prototype.construIctor.call(this)。
-
super 作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
值的注意的是,由于 super 指向父类的原型对象,所以定义在父类实例上的方法或属性,是无法通过 supper 调用的。