this指向取决于函数调用方式:实例方法调用时指向实例,箭头函数继承外层this,静态方法指向类本身,事件回调需手动绑定以避免this丢失。

在 JavaScript 类与对象中,this 的指向核心取决于**函数如何被调用**,而不是它写在哪里。类内部的普通方法、箭头函数、事件回调、定时器回调等场景下,this 表现不同,容易出错。
类中普通方法里的 this 指向实例对象
当使用 class 定义类,且方法是常规函数(非箭头函数)时,只要该方法通过实例调用(如 obj.method()),this 就指向调用它的那个实例。
- 构造函数中的
this指向新创建的实例 - 实例方法中
this默认绑定到该实例(前提是没被重新赋值或脱离上下文) - 如果把方法单独提取出来(如
const fn = obj.method),this 会丢失,变成undefined(严格模式)或全局对象(非严格)
箭头函数不绑定 this,继承外层作用域
类中定义的箭头函数本身没有自己的 this,它会沿作用域链向上查找,取定义时所在上下文的 this 值——通常是类的实例。
- 适合用于回调、定时器、事件监听器等需要保持实例上下文的场景
- 不能用
call/apply/bind改变其 this - 注意:箭头函数不能作为构造函数,也不能用
new
静态方法中的 this 指向类本身
用 static 声明的方法属于类,不属于实例。调用时 this 指向的是类(即构造函数本身),不是实例。
立即学习“Java免费学习笔记(深入)”;
- 可用于工具函数、工厂方法、与实例无关的逻辑
- 静态方法里访问不到实例属性(如
this.name),但可以访问其他静态属性或方法
事件处理和回调中 this 容易丢失
给 DOM 元素绑定事件或传入异步回调时,this 很可能不再指向类实例,因为函数被“挪走”调用了。
- 常见修复方式:
bind(this)、使用箭头函数、或在 constructor 中提前绑定(如this.handleClick = this.handleClick.bind(this)) - 现代写法推荐:在类字段中直接用箭头函数定义方法(
handleClick = () => { ... }),自动绑定 this


















