返回

JavaScript 中的类——深入 JavaScript 学习之路 (二)

前端

在 JavaScript 世界中,类是一门必不可少的技术,它允许我们创建具有相同行为和属性的对象集合。在 JavaScript 中引入类之前,我们主要使用函数和构造函数来模拟类。然而,ES6 的出现带来了一个正式的类语法,简化了类的创建和使用,并消除了使用构造函数模拟类的缺点。

类 vs 构造函数

构造函数是一种特殊类型的函数,它用于创建对象。要使用构造函数创建对象,我们使用 new 。构造函数的主要优点是,它允许我们创建具有私有属性和方法的对象。然而,构造函数也存在一些缺点,例如:

  • 构造函数无法继承其他构造函数。
  • 构造函数语法笨拙且不直观。

ES6 中的类

ES6 引入了 class 关键字,它提供了更简洁、更直观的方式来创建类。类是语法糖,它实际上仍然编译成构造函数。然而,类提供了几个主要优势:

  • 继承: 类支持继承,允许我们创建子类,继承父类的属性和方法。
  • 语法简洁: 类语法比构造函数语法更简洁、更直观。
  • 私有和公共成员: 类允许我们定义私有和公共成员,这有助于提高代码的封装性。

创建类

要创建类,我们使用 class 关键字,后跟类名。类的主体包含类的属性和方法。

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.`);
  }
}

实例化类

要实例化类,我们使用 new 关键字,后跟类名和构造函数参数。

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

继承

为了创建子类,我们使用 extends 关键字,后跟父类的名称。子类继承父类的所有属性和方法。

class Student extends Person {
  constructor(name, age, major) {
    super(name, age); // 调用父类的构造函数
    this.major = major;
  }

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

私有和公共成员

类允许我们定义私有和公共成员。私有成员只能在类的内部访问,而公共成员可以在类的内部和外部访问。要定义私有成员,我们在成员名称前加上 # 符号。

class Person {
  #name; // 私有属性
  constructor(name, age) {
    this.#name = name; // 只能在类的内部访问
    this.age = age; // 公共属性
  }
}

结论

ES6 中的类提供了一种简单、直观的方式来创建和使用类。它们消除了使用构造函数模拟类的缺点,并提供了几个主要优势,例如继承、更简洁的语法以及私有和公共成员。理解 JavaScript 中的类对于编写可重用、可维护和可扩展的代码至关重要。

**