static = keyword that defines properties or methods that belong to a class itself rather than the object created from that class ( class owns anything static, not the objects).

在 JavaScript 类(class)中,static 用来声明 静态属性 和 静态方法。 👉 静态成员属于类本身,而不是某个实例对象。

  • 普通方法/属性 → 属于对象实例(this.xxx)
  • 静态方法/属性 → 属于类(ClassName.xxx)
class MathUtil{
    static PI = 3.142;
    
    static getDiameter(radius){
        return radius * 2;
    }
    static getCircumference(radius){
        return 2 * this.PI * radius;
    }
    static getArea(radius){
        return this.PI * radius * radius;
    }
}
 
console.log(MathUtil.PI);
console.log(MathUtil.getDiameter(10));
console.log(MathUtil.getCircumference(10));
console.log(MathUtil.getArea(10));

another example:

class User{
    
    static userCount = 0; // 静态属性,属于 User 类
    
    constructor(username){
        this.username = username; // 普通属性,属于每个对象 
        User.userCount++; // 每次 new 一个对象,类的计数器 +1
    }
    
    static getUserCount(){
        return `There are ${User.userCount} users online`
    } // 静态方法,属于 User 类
        
    sayHello(){
        return `Hello, my username is ${this.username}`
    } // 普通方法,属于对象
}
 
// 使用 constructor 来创建 object
const user1 = new User("Spongebob");
const user2 = new User("Patrick");
const user3 = new User("Sandy");
 
// 普通属性 & 方法 👉 必须通过对象来访问
console.log(user1.username);
console.log(user2.username);
console.log(user3.username);
console.log(user1.sayHello())
console.log(user2.sayHello())
console.log(user3.sayHello())
 
// 静态属性 & 方法 👉 必须通过类来访问
console.log(User.userCount);
console.log(User.getUserCount());
 

输出结果:

Spongebob
Patrick
Sandy
Hello, my username is Sandy
3
There are 3 users online
 
=== Code Execution Successful ===