类的继承

219 阅读2分钟

这是我参与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 调用的。