在 javascript 构造函数中定义静态属性,最直接的方法是在构造函数函数体外部通过点语法直接挂载到构造函数对象上。例如定义一个 user 类,可以通过 user.count = 0; 来添加静态计数器。这种方式定义的属性属于构造函数本身,而不是其实例,因此可以直接通过 user.count 访问,无需实例化。

使用 ES6 class 语法的 static 关键字
如果使用 ES6 的 class 语法,可以使用 static 关键字在类内部定义静态属性。这是现代 JavaScript 推荐的标准写法,语义更清晰。静态方法或属性在类定义时即被创建,并绑定在类对象上,而非原型链上。

class User {
constructor(name) {
this.name = name;
}
// 定义静态属性
static count = 0;
// 定义静态方法
static incrementCount() {
User.count++;
}
}
// 测试
User.incrementCount();
console.log(User.count); // 输出: 1
const u1 = new User('Alice');
console.log(u1.count); // 输出: undefined,实例无法直接访问静态属性上述代码展示了如何在 class 中定义静态属性和方法。注意 u1.count 为 undefined,因为静态属性不属于实例。只有通过 User.count 才能访问。
立即学习“Java免费学习笔记(深入)”;
传统构造函数方式的静态属性挂载
在 ES5 或更早的传统构造函数模式中,没有 static 关键字,通常直接在构造函数定义后,将属性赋值给构造函数自身。这种模式与 ES6 的 static 效果一致,但写法较为分散。

function LegacyUser(name) {
this.name = name;
}
// 在构造函数外部挂载静态属性
LegacyUser.count = 0;
LegacyUser.incrementCount = function() {
LegacyUser.count++;
};
// 测试
LegacyUser.incrementCount();
console.log(LegacyUser.count); // 输出: 1
const lu1 = new LegacyUser('Bob');
console.log(lu1.count); // 输出: undefined对比两种写法,ES6 class 将静态成员封装在类体内,而传统方式需在类体外手动挂载。两者在内存中的归属相同,均指向构造函数对象。在实际开发中,优先使用 static 关键字以保持代码结构紧凑。


















