返回

用 ES5 实现类和继承

前端

ES5 中的类与继承

引子

在 JavaScript 中,可以通过函数来创建对象,但函数这种方式对于创建复杂对象时存在局限性。例如,使用函数创建对象时,无法直接访问对象的属性和方法,需要通过 this 来访问。为了解决这些问题,ES5 中引入了类和继承的概念,使我们能够以一种更加面向对象的方式来创建和管理对象。

类与继承的基础

在 ES5 中,类是一个构造函数的模板。我们可以使用 class 关键字来创建类,并使用 new 操作符来创建类的实例。类的实例具有与类相同的属性和方法,因此可以通过实例来访问和使用这些属性和方法。

继承是指子类可以继承父类的属性和方法。在 ES5 中,可以通过 extends 关键字来实现继承。子类可以通过 super 关键字来访问父类的方法和属性。

代码示例

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

class Student extends Person {
  constructor(name, age, major) {
    super(name, age);
    this.major = major;
  }

  study() {
    console.log(`${this.name} is studying ${this.major}.`);
  }
}

const person = new Person('John Doe', 30);
person.greet(); // Hello, my name is John Doe and I am 30 years old.

const student = new Student('Jane Doe', 20, 'Computer Science');
student.greet(); // Hello, my name is Jane Doe and I am 20 years old.
student.study(); // Jane Doe is studying Computer Science.

执行过程和结果

这段代码首先定义了一个 Person 类,然后定义了一个 Student 类,继承自 Person 类。接下来,创建了一个 Person 类的实例和一个 Student 类的实例。最后,调用 greet() 方法和 study() 方法来输出结果。

输出结果如下:

Hello, my name is John Doe and I am 30 years old.
Hello, my name is Jane Doe and I am 20 years old.
Jane Doe is studying Computer Science.

个人理解

ES5 中的类和继承虽然不如 ES6 中的类和继承那么强大,但是仍然可以让我们以一种更加面向对象的方式来创建和管理对象。通过使用类和继承,我们可以创建出更加复杂和灵活的 JavaScript 程序。