JavaScript 类和继承

预计阅读时间1 分 102 views

在现代JavaScript开发中,使用类和继承可以帮助我们更好地组织和管理代码,特别是在构建复杂的应用程序时。类提供了一种简洁的语法来创建对象和定义对象行为,而继承允许我们创建具有共享行为的对象。

创建类

ES6引入了class关键字,用于创建类。一个类通常包含一个构造函数(constructor)和若干方法。

class Animal {
  constructor(name) {
    this.name = name;
  }

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

构造函数与原型链

构造函数在实例化时被调用,负责初始化对象的属性。类的方法实际上存储在原型链上,使得所有实例都能共享这些方法。

const animal = new Animal('Lion');
animal.speak(); // 输出: Lion makes a noise.

在JavaScript中,除了构造函数之外,类还可以定义其他方法。这些方法并不直接存储在每个实例对象上,而是存储在一个特殊的对象——原型(prototype)上。原型是类的一个属性,它包含了一个类的所有实例共享的方法。当你调用一个实例的方法时,JavaScript引擎首先检查该实例是否拥有这个方法,如果没有,它会沿着原型链向上查找,直到找到这个方法为止。由于所有的实例共享同一个原型对象,因此它们也共享这些方法,这样可以节省内存空间。

继承与super关键字

继承允许我们基于现有类创建新类。在子类中,使用extends关键字继承父类,并通过super关键字调用父类的构造函数和方法。

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

  speak() {
    super.speak(); // 调用父类方法
    console.log(`${this.name} barks.`);
  }
}

在这个例子中,Dog类继承了Animal类,并在其构造函数中通过super调用了父类的构造函数来设置name属性。speak方法不仅调用了Animal类的speak方法,还增加了新的行为。

完整代码示例

下面是一个综合示例,展示了如何使用类和继承来创建和扩展对象。

// 定义Animal类
class Animal {
  constructor(name) {
    this.name = name;
  }

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

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

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

// 创建Animal的实例
const lion = new Animal('Lion');
lion.speak(); // 输出: Lion makes a noise.

// 创建Dog的实例
const dog = new Dog('Rex', 'Labrador');
dog.speak(); // 输出: Rex makes a noise. Rex barks.
分享此文档

JavaScript 类和继承

或复制链接

本页目录