聊聊JavaScript中的对象——是对象,不是“对象”!(三)

67 阅读2分钟

在封装、多态之后,就是继承了。

继承

所谓继承就是子类继承父类的属性和方法,目的是可以让子类的实例能够使用父类的属性和方法。

我们这里不讨论ES5中利用原型实现的继承,而是只讨论ES6中新添加的关键字extends实现的继承。

//父类
class Parent {
    constructor(name) {
        this.name = name
    }
    eat() {
        console.log('这是一个' + this.name);
    }
}

//子类
class Child extends Parent {
    constructor(name, age) {
        super(name)
        this.age = age
    }
}

let obj = new Child('西红柿', 22);
obj.eat();
console.log(obj.name, obj.age); // 西红柿 22

ES5继承和ES6继承的区别:

ES5:先创建子类的实例对象,再把父类的属性和方法添加到this上。

ES6:先创建父类的实例对象this,再用子类的构造函数修改this。因为子类没有自己的this,所以必须调用父类的super()方法,否则新建实例会报错。

ES6语言中的extends是用于创建一个子类的关键字。它可以继承一个已经存在的类,并在其上添加新的属性或方法,以便进行更多的功能扩展。

extends的作用就是让子类继承父类的行为,并且可以在子类中添加新的成员或者覆盖父类的成员。这样可以减少代码的重复,提高代码的复用性。

使用extends关键字创建子类的语法如下:

class 子类名 extends 父类名 {
  constructor(子类参数列表) {
    super(父类参数列表);
    // 子类的构造函数
  }

  // 子类自己的方法
  
}

其中,子类名表示要创建的子类的名称;

extends表示继承关系,后面紧跟的是父类名称;

constructor表示子类的构造函数,其中必须调用父类的构造函数;

super表示调用父类的构造函数。

子类的方法可以覆盖父类的同名方法,如果需要调用父类的方法,使用super关键字。

笔者认为继承本身就是对类定义的进一步抽象,使代码具有更好的复用性,降低代码的耦合度,实现代码的可拓展性。