es6中静态方法用static关键字定义,属于类本身而非实例,只能通过类名调用(如classname.method()),不能被实例继承或调用;其this指向类构造函数,可访问静态成员但不可访问实例属性和方法。

ES6 中的静态方法用 static 关键字定义,它属于类本身,不依赖实例,因此只能通过类名调用,不能通过 new 出来的对象调用。
怎么定义静态方法
在 class 内部的方法前加 static 即可:
- 写法简洁:直接在方法声明前加
static - 不参与实例继承:该方法不会出现在原型链上,也不会被实例访问
- 常见用途:工具函数、工厂方法、与类逻辑相关但无需实例状态的操作(比如数据校验、对象创建)
为什么只能通过类名调用
因为静态方法绑定在类构造函数对象上,而非原型(prototype)上:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 调用方式唯一:
ClassName.staticMethod() - 实例调用会报错:
new ClassName().staticMethod()→TypeError: not a function -
this在静态方法中指向类本身(即构造函数),不是实例对象
静态方法能做什么、不能做什么
静态方法有明确的能力边界:
- ✅ 可访问其他静态属性/方法(用
ClassName.prop或this.prop) - ✅ 可被子类继承(
SubClass.staticMethod()可直接用) - ❌ 无法访问
this.name等实例属性(没有实例上下文) - ❌ 不能直接调用实例方法(如
this.instanceMethod()会报错) - ❌ 实例方法里也不能直接用
this.staticMethod(),需改用ClassName.staticMethod()
一个实用例子
用静态方法实现对象工厂:
class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
static createAdmin(name) {
return new User(name, 0); // 忽略年龄,统一设为 0
}
}
const admin = User.createAdmin('张三'); // ✅ 正确
// const u = new User('李四', 25);
// u.createAdmin('王五'); // ❌ 报错










