什么是静态方法?

静态方法是直接绑定到类本身而不是类实例的方法。这意味着您可以直接通过类调用静态方法,而无需创建类的实例。不能用实例调用。

class MyClass {
  static myStaticMethod() {
    return '这是一个静态方法';
  }
  
  // 实例方法
  regularMethod() {
    return '这是一个实例方法';
  }
}

// 调用静态方法
MyClass.myStaticMethod(); // "这是一个静态方法"

// 创建实例调用实例方法
const instance = new MyClass();
instance.regularMethod(); // "这是一个实例方法"

主要特点

  1. 无需实例化:可以直接通过类名调用

  2. 无法访问实例属性:静态方法中不能使用 this 来访问实例属性

  3. 可被继承:子类可以继承父类的静态方法

  4. 常用于工具函数:适合创建与类相关但不需要实例数据的辅助函数

  5. class MathUtils {
      // 静态方法:计算圆的面积
      static calculateCircleArea(radius) {
        return Math.PI * radius * radius;
      }
      
      // 静态方法:生成随机数范围
      static getRandomNumber(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
      }
    }
    
    // 使用静态方法
    const area = MathUtils.calculateCircleArea(5);
    console.log(area); // 78.53981633974483
    
    const randomNum = MathUtils.getRandomNumber(1, 100);
    console.log(randomNum); // 1-100之间的随机数

    静态方法与实例方法的对比

    特性静态方法实例方法
    调用方式ClassName.method()instance.method()
    访问实例属性不能可以
    使用 this指向类本身指向实例
    内存使用只存在一份每个实例都有一份

继承中的静态方法

在 JavaScript 中,当子类继承父类时,静态方法也会自动被继承。这是因为类的继承是通过原型链实现的,静态方法存储在类的构造函数上,而子类的构造函数会继承父类构造函数的属性(包括静态方法)。

class Animal {
  static describe() {
    return '这是一个动物类';
  }
}

class Dog extends Animal {
  static bark() {
    return '汪汪!';
  }
}

// 子类继承父类的静态方法
console.log(Dog.describe()); // "这是一个动物类"
console.log(Dog.bark()); // "汪汪!"

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐