JavaScript教程

类和继承

Preview
  • JavaScript ES6的类和继承
  • 定义类
  • 创建类的实例
  • 类的静态方法
  • 继承
  • 定义子类
  • 创建子类的实例
  • 子类的静态方法
  • 在子类中调用父类的方法
  • 总结

JavaScript ES6的类和继承

JavaScript ES6引入了类和继承的特性,使得面向对象编程更加方便和直观。

类是一种抽象的概念,它用来描述一类对象的共同特征和行为。在ES6中,我们可以使用class关键字来定义一个类。

定义类

类的定义包括类名、构造函数和类的方法。构造函数用来初始化类的实例,方法用来描述类的行为。

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

  sayHello() {
    console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old.`);
  }
}

上面的代码定义了一个Person类,它有一个构造函数constructor和一个sayHello方法。构造函数用来初始化类的实例,方法用来描述类的行为。

创建类的实例

创建类的实例,可以使用new关键字和类的构造函数。

const person = new Person('Tom', 18);
person.sayHello(); // Hello, my name is Tom, I'm 18 years old.

上面的代码创建了一个Person类的实例,并调用了sayHello方法。

类的静态方法

类的静态方法是指在类上定义的方法,而不是在类的实例上定义的方法。静态方法通常用来实现一些与类相关的功能,而不是与类的实例相关的功能。

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

  sayHello() {
    console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old.`);
  }

  static create(name, age) {
    return new Person(name, age);
  }
}

上面的代码定义了一个create静态方法,它用来创建一个Person类的实例。

const person = Person.create('Tom', 18);
person.sayHello(); // Hello, my name is Tom, I'm 18 years old.

上面的代码通过create静态方法创建了一个Person类的实例。

继承

继承是面向对象编程中的一个重要概念,它允许我们定义一个类,并从另一个类派生出来,从而继承父类的属性和方法。在ES6中,我们可以使用extends关键字来实现继承。

定义子类

定义子类时,需要使用extends关键字来继承父类,并使用super关键字在子类的构造函数中调用父类的构造函数。

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

  sayHello() {
    console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old, and I'm in grade ${this.grade}.`);
  }
}

上面的代码定义了一个Student类,它从Person类继承而来,并添加了一个grade属性。它还重写了sayHello方法,以便在输出时包含grade属性。

创建子类的实例

创建子类的实例,可以使用new关键字和子类的构造函数。

const student = new Student('Alice', 16, 10);
student.sayHello(); // Hello, my name is Alice, I'm 16 years old, and I'm in grade 10.

上面的代码创建了一个Student类的实例,并调用了sayHello方法。

子类的静态方法

子类可以定义自己的静态方法,也可以继承父类的静态方法。

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

  sayHello() {
    console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old, and I'm in grade ${this.grade}.`);
  }

  static create(name, age, grade) {
    return new Student(name, age, grade);
  }
}

上面的代码在Student类中定义了一个静态方法create,它用来创建一个Student类的实例。

const student = Student.create('Alice', 16, 10);
student.sayHello(); // Hello, my name is Alice, I'm 16 years old, and I'm in grade 10.

上面的代码通过create静态方法创建了一个Student类的实例。

在子类中调用父类的方法

在子类中重写父类的方法时,可以使用super关键字调用父类的方法。

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

  sayHello() {
    super.sayHello();
    console.log(`I'm a student.`);
  }
}

上面的代码在子类中重写了sayHello方法,并使用super.sayHello()调用了父类的sayHello方法。

总结

JavaScript ES6的类和继承特性使得面向对象编程更加方便和直观。类用来描述一类对象的共同特征和行为,继承允许我们从一个类派生出另一个类,并继承父类的属性和方法。在子类中重写父类的方法时,可以使用super关键字调用父类的方法。子类可以定义自己的静态方法,也可以继承父类的静态方法。