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 ===