ES6 中的类继承使用 extends 关键字。通过继承,子类可以复用父类的属性和方法,并且可以在子类中添加新的属性和方法,或者覆盖父类的方法。

以下是一个简单的类继承的例子:
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    // 调用父类的构造函数
    super(name);
    this.breed = breed;
  }

  // 覆盖父类的方法
  speak() {
    console.log(`${this.name} barks.`);
  }

  fetch() {
    console.log(`${this.name} fetches the ball.`);
  }
}

const myDog = new Dog('Buddy', 'Golden Retriever');
myDog.speak(); // 输出: Buddy barks.
myDog.fetch(); // 输出: Buddy fetches the ball.

在这个例子中,Dog 类继承自 Animal 类。子类 Dog 在构造函数中使用 super(name) 调用父类 Animal 的构造函数,以获取共享的属性。然后,子类 Dog 可以覆盖父类的方法(例如,speak),也可以添加新的方法(例如,fetch)。

值得注意的是,子类在调用 super 之前不能使用 this 关键字,因为 super 负责初始化父类的属性,确保子类在使用之前拥有正确的父类状态。

继承还可以用于扩展内置对象的功能,例如扩展 Array 类:
class MyArray extends Array {
  constructor(...args) {
    super(...args);
  }

  // 添加新方法
  sum() {
    return this.reduce((total, current) => total + current, 0);
  }
}

const myNumbers = new MyArray(1, 2, 3, 4, 5);
console.log(myNumbers.sum()); // 输出: 15

在这个例子中,MyArray 继承自内置的 Array 类,并添加了一个新的方法 sum,用于计算数组中所有元素的和。


转载请注明出处:http://www.zyzy.cn/article/detail/4682/ES6