静态方法

Frontend SELF ZH
第 40 级 , 课程 1
可用

8.1 声明静态方法

在JavaScript中,静态方法是定义在类上的方法,而不是它的实例。它们直接在类上调用,而不是在由该类创建的对象上调用。静态方法通常用于创建与类相关的辅助功能,但与具体对象无关。

静态方法使用 static 关键字在类体中定义。

例子:

  • 方法 addmultiply 使用关键字 static 声明为静态的
  • 这些方法直接在类 MathHelper 上调用,而不是在它的实例上
JavaScript
    
      class MathHelper {
        static add(a, b) {
          return a + b;
        }

        static multiply(a, b) {
          return a * b;
        }
      }

      console.log(MathHelper.add(5, 3)); // 8
      console.log(MathHelper.multiply(5, 3)); // 15
    
  

8.2 使用静态方法

静态方法在以下场景中很有用:

  1. 辅助功能:静态方法可用于创建执行与类相关操作的实用函数。
  2. 工厂方法:静态方法可用于使用特定逻辑创建类的实例。
  3. 数据处理:静态方法可用于处理与类相关的数据,但不需要创建类的实例。

辅助功能的例子:

  • StringUtil 包含静态方法 capitalizereverse,这些方法用于处理字符串
  • 这些方法直接在类 StringUtil 上调用
JavaScript
    
      class StringUtil {
        static capitalize(str) {
          return str.charAt(0).toUpperCase() + str.slice(1);
        }

        static reverse(str) {
          return str.split('').reverse().join('');
        }
      }

      console.log(StringUtil.capitalize('hello')); // "Hello"
      console.log(StringUtil.reverse('hello')); // "olleh"
    
  

工厂方法的例子:

静态方法 fromObject 从数据对象创建类 Car 的实例。

JavaScript
    
      class Car {
        constructor(brand, model) {
          this.brand = brand;
          this.model = model;
        }

        static fromObject(obj) {
          return new Car(obj.brand, obj.model);
        }
      }

      const carData = { brand: 'Toyota', model: 'Camry' };
      const car = Car.fromObject(carData);

      console.log(car.brand); // "Toyota"
      console.log(car.model); // "Camry"
    
  

8.3 静态方法和继承

在JavaScript中,静态方法也会被派生类继承。派生类可以使用基类的静态方法或重写它们。

继承静态方法的例子:

  • 静态方法 identify 在类 Animal 中定义,并在类 Dog 中重写
  • 在两个类上调用方法 identify
JavaScript
    
      class Animal {
        static identify() {
          return 'This is an animal';
        }
      }

      class Dog extends Animal {
        static identify() {
          return 'This is a dog';
        }
      }

      console.log(Animal.identify()); // "This is an animal"
      console.log(Dog.identify()); // "This is a dog"
    
  

8.4 在其他方法中访问静态方法

静态方法可以通过类名在类的其他方法中调用。

例子:

静态方法 calculateArea 在另一个静态方法 describeCircle 中调用,使用关键字 this,它在此上下文中引用类 Geometry 本身。

JavaScript
    
      class Geometry {
        static calculateArea(radius) {
          return Math.PI * radius * radius;
        }

        static describeCircle(radius) {
          const area = this.calculateArea(radius);
          return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
        }
      }

      console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
    
  

8.5 静态方法和类的实例

静态方法不能在类的实例上调用。尝试在实例上调用静态方法会导致错误。

例子:

静态方法 add 在类 Calculator 上调用,而不是在它的实例 calc 上。

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

      const calc = new Calculator();
      console.log(Calculator.add(3, 4)); // 7

      console.log(calc.add(3, 4)); // 错误: calc.add 不是一个函数
    
  
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION