javascript构造函数的静态属性和方法直接挂载在构造函数上,不依赖实例,用于共享数据(如版本号、计数器)和通用操作(如工厂方法、校验),不能被实例继承。

JavaScript 中构造函数本身是函数对象,因此可以直接在构造函数上添加属性和方法,这些就是静态属性和静态方法。它们不依赖实例,而是直接通过构造函数名调用。
静态属性:直接赋值给构造函数
静态属性用于存储与类/构造函数相关、但不随实例变化的共享数据。只需将属性直接挂载到构造函数上即可:
- 定义方式:`ConstructorName.propertyName = value`
- 常见用途:版本号、默认配置、计数器(如已创建实例总数)
- 注意:修改静态属性会影响所有后续使用,不是每个实例的副本
示例:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
function Person(name) {
this.name = name;
}
Person.species = 'Homo sapiens'; // 静态属性
Person.count = 0; // 实例计数器(需配合使用)
Person.prototype.sayHello = function() {
console.log(`Hello, I'm ${this.name}`);
};
静态方法:直接赋值给构造函数的函数
静态方法用于执行与构造函数逻辑相关、但无需访问实例内部状态的操作,比如工厂方法、工具函数、类型判断等:
- 定义方式:`ConstructorName.methodName = function() { ... }`
- 不能访问 `this` 指向的实例(除非显式传入),但可访问构造函数自身的静态属性
- 常用于创建实例(如 `fromArray`)、校验、转换等
示例:
Person.create = function(name) {
return new Person(name);
};
Person.isAdult = function(age) {
return age >= 18;
};
Person.getCount = function() {
return Person.count;
};
// 使用
const p = Person.create('Alice'); // 调用静态方法创建实例
console.log(Person.isAdult(25)); // true
配合实例更新静态状态(如计数器)
若需在每次创建实例时自动更新静态属性(如统计数量),需在构造函数内部操作该静态属性:
- 在构造函数第一行递增 `ConstructorName.counter++`
- 确保初始化静态计数器(避免 `undefined + 1`)
- 适用于日志、监控、单例控制等场景
示例:
function Person(name) {
this.name = name;
Person.count = (Person.count || 0) + 1; // 自增计数器
}
Person.count = 0; // 初始化
new Person('Tom');
new Person('Jerry');
console.log(Person.count); // 2
ES6 class 语法中的等价写法(补充参考)
虽然问题聚焦构造函数,但现代写法中 `class` 更直观支持静态成员,其底层仍基于函数对象:
- `static` 关键字声明静态属性或方法
- 本质仍是挂载在类名(即构造函数)上,`class Person {}` 等价于 `function Person() {}`
- 兼容性好,推荐新项目使用;老代码维护时理解构造函数方式更关键
示例:
class Person {
constructor(name) {
this.name = name;
Person.count++;
}
static count = 0;
static species = 'Homo sapiens';
static create(name) {
return new Person(name);
}
}
不复杂但容易忽略:静态成员属于构造函数本身,和原型链无关,也不能被实例继承(`p.species` 是 `undefined`,除非手动设置或使用 `Object.getPrototypeOf(p).constructor.species`)。正确使用能提升代码组织性和复用性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










