实例方法定义在class体内constructor外,自动绑定到prototype,通过this访问实例属性;静态方法用static声明,属于类本身,通过类名调用,this指向类而非实例。

实例方法直接写在 class 体内
实例方法就是每个对象都能调用的函数,定义时不需要加任何关键字,直接写在 constructor 外面、class 花括号内即可。它们会自动绑定到类的 prototype 上,所有实例共享同一份方法代码。
- 方法内部通过 this 访问当前实例的属性
- 不能用箭头函数定义(会丢失 this 绑定)
- 不支持重载,同名方法会被后定义的覆盖
例如:
立即学习“Java免费学习笔记(深入)”;
class Car {
constructor(brand, speed) {
this.brand = brand;
this.speed = speed;
}
// 实例方法:所有 car 实例都可以调用
accelerate() {
this.speed += 10;
return `${this.brand} 当前速度:${this.speed} km/h`;
}
}
const myCar = new Car('Toyota', 60);
myCar.accelerate(); // "Toyota 当前速度:70 km/h"静态方法用 static 关键字声明
静态方法属于类本身,不是某个具体实例,所以不能通过 new 出来的对象 调用,只能用 类名.方法名 的方式访问。
- 常用于工具函数、工厂创建逻辑或与类相关但不依赖实例状态的操作
- 静态方法里不能用 this 指向实例(因为没有实例),但可以用 this 指向类本身(比如访问其他静态属性)
- 静态方法不会被继承到子类的原型链上,但可通过 子类名.方法名 继承调用(ES6 默认行为)
例如:
立即学习“Java免费学习笔记(深入)”;
class MathUtils {
static PI = 3.14159;
<p>static circleArea(radius) {
return this.PI <em> radius </em> radius;
}</p><p>static isEven(num) {
return num % 2 === 0;
}
}</p><p>MathUtils.circleArea(5); // 78.53975
MathUtils.isEven(4); // true
// new MathUtils().circleArea(); // 报错:不是函数区分清楚 this 的指向场景
这是容易出错的关键点:
- 在实例方法中,this 指向调用它的那个实例
- 在静态方法中,this 指向类本身(即构造函数),可用于读取静态属性或调用其他静态方法
- 如果在静态方法里误写 this.xxx 去访问实例属性,运行时会是 undefined 或报错
小提示:可以给静态方法加类型检查或 JSDoc 注释,避免误用。
注意语法细节和兼容性
class 语法从 ES6 开始支持,但部分特性有版本要求:
- 公有/私有字段(如 #name)、顶层 await 等需现代环境(Node.js ≥ 14 / 浏览器较新版本)
- 静态方法和静态字段(static field)在 ES2022 正式落地,旧环境需 Babel 转译
- class 声明不提升,必须先定义再使用,否则 ReferenceError
实际项目中建议配合 ESLint 规则(如 no-use-before-define)提前发现顺序问题。


















