JavaScript 类中静态变量与私有变量的区别及用法
一、静态变量(静态属性)
定义:
通过 static
关键字声明,属于类本身而非实例,通过类名直接访问。
特性:
归属:绑定在类上,所有实例共享同一份数据
访问:类外部通过
ClassName.prop
访问内存:类加载时初始化,生命周期与类相同
方法内:静态方法中的
this
指向类本身
定义方式:
class Config {static API_KEY = "x1y2z3"; // 静态属性static MAX_USERS = 100;
}
用途:全局配置、工具方法、跨实例共享常量。
示例:
class Config {static API_KEY = "x1y2z3"; // 静态属性static MAX_USERS = 100;static validateKey() {// this指向Config类return this.API_KEY.length > 10; }
}console.log(Config.API_KEY); // "x1y2z3"
Config.MAX_USERS = 200; // 修改静态属性
二、私有变量(私有字段)
定义:
通过 #
前缀声明,仅在类内部可访问。
特性:
封装性:外部无法直接访问(
user.#password
会报错)实例级:每个实例拥有独立副本(
new User("a")
和new User("b")
的#password
互不影响)访问限制:必须通过类内部方法读写
命名规范:强制以
#
开头命名继承限制:子类无法继承父类的私有字段
用途:敏感数据(密码、token)、内部状态管理
定义方式:
class User {#password; // 私有字段声明(必须带#)constructor(pwd) {this.#password = pwd; // 内部赋值}
}
示例:
class User {#password; // 私有字段constructor(name, pwd) {this.name = name;this.#password = pwd; // 内部赋值}login(inputPwd) {return this.#password === inputPwd;}
}const user = new User("Alice", "secret");
console.log(user.password); // undefined (外部不可访问)
console.log(user.login("secret")); // true (通过方法验证)
核心对比表
特性 | 静态变量 | 私有变量 |
---|---|---|
声明 | static prop = value | #prop (需预先声明) |
归属 | 类本身(Config.prop ) | 实例对象(user.#prop ) |
访问范围 | 类内外均可访问 | 仅类内部可访问 |
内存分配 | 单份(所有实例共享) | 每实例独立 |
修改影响 | 影响所有实例 | 仅影响当前实例 |
典型用途 | 全局配置、工具方法 | 敏感数据、内部状态 |