📝 静态属性和方法
class User {
// 静态属性:所有实例共享
static count: number = 0;
static readonly version: string = '1.0.0';
// 实例属性
name: string;
constructor(name: string) {
this.name = name;
User.count++; // 访问静态属性
}
// 静态方法
static getCount(): number {
return User.count;
}
static createAnonymous(): User {
return new User('Anonymous');
}
}
// 访问静态成员:通过类名访问
console.log(User.version); // '1.0.0'
console.log(User.count); // 0
const user1 = new User('Alice');
const user2 = new User('Bob');
console.log(User.count); // 2
console.log(User.getCount()); // 2
const anonymous = User.createAnonymous();
console.log(anonymous.name); // 'Anonymous'
// 实例无法访问静态成员
// user1.count; // Error
💡
静态 vs 实例
静态成员属于类本身,通过类名访问;实例成员属于对象实例,通过 this 或对象访问。
💻 实际应用
// 单例模式
class Database {
private static instance: Database;
private constructor() {} // 私有构造函数
static getInstance(): Database {
if (!Database.instance) {
Database.instance = new Database();
}
return Database.instance;
}
}
const db1 = Database.getInstance();
const db2 = Database.getInstance();
console.log(db1 === db2); // true
// 工具类
class MathUtils {
static PI = 3.14159265;
static square(n: number): number {
return n * n;
}
static clamp(value: number, min: number, max: number): number {
return Math.max(min, Math.min(max, value));
}
}
console.log(MathUtils.PI); // 3.14159265
console.log(MathUtils.square(5)); // 25
console.log(MathUtils.clamp(10, 0, 5)); // 5