实例方法属于对象,静态方法属于类本身;实例方法定义在class内无static,通过实例调用并可访问this;静态方法用static声明,只能通过类名调用,不可访问this。

在 JavaScript 的 class 中,实例方法和静态方法的定义位置、语法和调用方式完全不同,核心区别在于:**实例方法属于对象,静态方法属于类本身**。
实例方法:写在 class 内部,不加 static
实例方法是每个对象都能调用的普通方法,它默认能访问 this(指向当前实例),用于操作实例属性。
- 直接写在
class大括号内,和constructor并列 - 不需要任何关键字,函数名后跟括号和花括号即可
- 必须通过
new创建的实例来调用
示例:
使用固定的 Next.js/Tailwind/Prisma 技术栈构建并记录独立 SaaS 项目,仅将 FastAPI 用于 Python 工作负载,并遵循严格的架构规范。
class User {
constructor(name) {
this.name = name;
}
// 这是实例方法
greet() {
return `Hello, ${this.name}`;
}
}
const u = new User('Alice');
u.greet(); // "Hello, Alice"
```
静态方法:用 static 关键字声明
静态方法挂载在类(即构造函数)上,不属于任何实例,不能访问 this(因为没有实例上下文),常用于工具函数、工厂方法或与类逻辑相关但不依赖实例状态的操作。
- 在方法名前加
static关键字 - 只能通过类名直接调用,如
User.createAdmin() - 实例无法调用,否则报
TypeError
示例:
```jsclass User {
constructor(name) {
this.name = name;
}
greet() {
return `Hello, ${this.name}`;
}
// 这是静态方法
static isValidName(str) {
return typeof str === 'string' && str.length > 0;
}
}
User.isValidName('Bob'); // true
// new User('C').isValidName(); // ❌ 报错:not a function
```
补充说明:静态属性和实例属性的位置
虽然问题聚焦方法,但属性定义也遵循类似规则:
- 实例属性通常写在
constructor内(如this.id = Date.now()),或用字段声明语法(id = Date.now())直接写在 class 体中 - 静态属性需加
static前缀(如static count = 0),也写在 class 体中,但不可在实例上访问










