在JavaScript事件回调中,this默认指向绑定事件的元素,而event.target始终指向实际触发事件的DOM元素;需根据场景选择使用this、event.target或event.currentTarget,并避免内联事件和箭头函数导致的上下文丢失。

在 JavaScript 事件回调中,this 默认指向绑定事件的元素(即事件目标的父级或当前监听器所属元素),但容易因调用方式变化而丢失上下文。要让 this 正确指向触发事件的目标元素,关键在于理解事件绑定方式与执行时的上下文关系,并选择合适的方法。
使用 addEventListener 时 this 指向监听器绑定的元素
通过 addEventListener 添加事件监听器时,回调函数中的 this 指向的是调用该方法的对象(通常是目标 DOM 元素),前提是没用箭头函数或显式改变上下文:
- 直接传入普通函数,this 指向绑定事件的元素(不是
event.target) - 若监听器绑定在父容器上(事件委托),this 是父容器,而
event.target才是真正被点击的子元素 - 避免用箭头函数作为回调,因为它不绑定 this,会继承外层作用域的 this(通常是
window或undefined)
需要精准获取触发事件的元素?优先用 event.target
当不确定 this 是否可靠(比如事件委托、类方法绑定、异步回调等场景),最稳妥的方式是直接使用事件对象的 event.target:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
event.target始终指向**实际触发事件的 DOM 元素**(如你点击的按钮) -
event.currentTarget始终指向**当前监听器绑定的元素**(如你调用addEventListener的那个父div) - 二者在直接绑定时通常相同;在事件委托中不同,此时应根据需求选其一
在类方法中绑定事件时保持 this 指向实例
若在 ES6 类中定义事件处理方法并绑定到 DOM 元素,需防止方法被单独调用导致 this 指向丢失:
立即学习“Java免费学习笔记(深入)”;
- 在构造函数中用
this.handleClick = this.handleClick.bind(this)预绑定 - 使用类字段语法 + 箭头函数:
handleClick = () => { console.log(this); }(this 指向类实例,非 DOM 元素) - 绑定时传入
bind(this, element)可额外携带参数,但注意此时 this 是类实例,DOM 元素需作为参数接收
避免常见陷阱:内联事件和 call/apply 改写 this
HTML 内联事件(如 onclick="handler()")中,this 指向全局对象,完全不可靠,应杜绝使用:
- 不要在 HTML 中写
onclick="this.style.color='red'",改用 JS 绑定并访问event.target - 手动用
func.call(element, event)虽可强制指定 this,但冗余且易错,不如直接用event.target - jQuery 的
.on()默认把 this 设为event.currentTarget,但现代开发推荐原生 API + 明确使用event.target

















