JavaScript 类 (class)
                           
天天向上
发布: 2025-02-27 23:40:06

原创
358 人浏览过

在 JavaScript 中,class 是一种定义对象的模板,可以用来创建多个具有相同属性和方法的对象。class 是 ES6(ECMAScript 2015)引入的一个新特性,它提供了一种更加面向对象的编程方式,使用起来类似于其他面向对象编程语言(如 Java 或 C++)的类定义方式。

在 JavaScript 中,类是通过 class 关键字定义的,可以包含构造函数、方法以及静态方法。类的实例是通过 new 关键字来创建的。

1. 基本语法:

class ClassName {
  constructor(parameters) {
    // 构造函数
  }

  method1() {
    // 普通方法
  }

  static staticMethod() {
    // 静态方法
  }
}
  • constructor:构造函数,用于初始化类的实例,类实例化时自动调用。
  • method1:类的实例方法,所有实例对象都可以调用这些方法。
  • staticMethod:类的静态方法,不能通过实例调用,只能通过类名调用。

2. 创建类与实例:

创建类后,可以使用 new 关键字来实例化类。

示例:

// 定义一个类
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.`);
  }
}

// 创建类的实例
const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);

// 调用实例方法
person1.greet();  // 输出: Hello, my name is Alice and I am 30 years old.
person2.greet();  // 输出: Hello, my name is Bob and I am 25 years old.
  • Person 是一个类,constructor 用于初始化对象,greet 是一个实例方法。
  • 通过 new Person() 创建了 person1person2 两个实例对象。

3. 类的继承:

JavaScript 中的类支持继承,可以通过 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.`);
  }
}

const dog = new Dog("Buddy", "Golden Retriever");
dog.speak();  // 输出: Buddy barks.
  • Dog 类通过 extends 关键字继承了 Animal 类。
  • 使用 super() 调用父类的构造函数,继承了 name 属性。
  • 子类重写了父类的 speak() 方法。

4. 静态方法:

静态方法是属于类本身而不是类的实例的方法。静态方法可以通过类名直接调用,而不能通过实例调用。

示例:

class MathUtility {
  static add(a, b) {
    return a + b;
  }

  static subtract(a, b) {
    return a - b;
  }
}

console.log(MathUtility.add(5, 3));      // 输出: 8
console.log(MathUtility.subtract(5, 3)); // 输出: 2
  • addsubtract 是静态方法,通过 MathUtility.add() 直接调用。

5. 获取和设置器(getter & setter):

类可以使用 getter 和 setter 方法来控制对对象属性的访问。getter 用于获取属性值,setter 用于设置属性值。

示例:

class Person {
  constructor(name) {
    this._name = name;  // 使用下划线命名属性表示私有变量
  }

  // Getter
  get name() {
    return this._name;
  }

  // Setter
  set name(value) {
    this._name = value;
  }
}

const person = new Person("Alice");
console.log(person.name);  // 输出: Alice

person.name = "Bob";
console.log(person.name);  // 输出: Bob
  • name 是一个 getter 和 setter,允许我们在访问或修改 _name 时进行自定义的处理。

6. 实例属性与静态属性:

实例属性是每个实例对象独有的属性,静态属性是类本身所具有的属性。

示例:

class Car {
  constructor(make, model) {
    this.make = make;  // 实例属性
    this.model = model;
  }

  static manufacturer = "Toyota";  // 静态属性
}

const car1 = new Car("Corolla", "2023");

console.log(car1.make);          // 输出: Corolla
console.log(Car.manufacturer);   // 输出: Toyota
  • makemodel 是实例属性,每个对象有自己的值。
  • manufacturer 是静态属性,类本身有一个共享的属性。

7. 类的方法与箭头函数:

类中的方法一般使用常规的函数定义,但可以使用箭头函数来定义类中的某些方法。箭头函数的 this 继承自外部作用域,而不是绑定到类的实例。

示例:

class Counter {
  constructor() {
    this.count = 0;
    this.increment = () => {
      this.count++;
      console.log(this.count);
    };
  }
}

const counter = new Counter();
counter.increment();  // 输出: 1
counter.increment();  // 输出: 2
  • 在这里,increment 是一个箭头函数,它的 this 始终指向 Counter 实例。

总结:

  • 类的定义:使用 class 关键字定义类,constructor 用于构造函数,method 用于实例方法。
  • 类的实例化:通过 new 关键字创建类的实例。
  • 继承:使用 extends 关键字继承父类,super() 调用父类的构造函数。
  • 静态方法:静态方法属于类本身,通过类名直接调用。
  • getter & setter:通过 getter 和 setter 控制属性的访问和设置。
  • 实例属性与静态属性:实例属性属于每个对象,静态属性属于类本身。
  • 箭头函数:类的方法可以使用箭头函数,但要注意箭头函数的 this 行为。

通过理解和使用 JavaScript 类,可以让你的代码更加结构化、易于维护,同时更好地模拟面向对象编程的思想。更多详细文章请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *