在javascript dom事件回调中,this默认指向事件当前目标元素(currenttarget),仅适用于普通函数通过addeventlistener或html属性绑定;箭头函数无this绑定,需用event.currenttarget;显式绑定会覆盖默认行为。

在 JavaScript DOM 事件回调中,this 默认指向当前触发事件的元素(即事件目标元素),但**仅限于使用传统函数声明(function)且通过 addEventListener 或 HTML 属性方式绑定时**。实际行为受绑定方式和函数类型影响,需特别注意箭头函数和显式绑定场景。
原生 addEventListener 中的 this
使用 addEventListener 添加事件监听器时,若回调是普通函数,this 自动绑定为当前触发事件的 DOM 元素(即 event.currentTarget):
- 它和
event.target多数情况下相同,但在事件冒泡/捕获阶段可能不同(如子元素触发、父元素监听) -
currentTarget始终是监听器所绑定的那个元素;target是真正触发事件的那个元素
示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
console.log(this); //
HTML 内联事件属性中的 this
在 HTML 中用 onclick="..." 绑定时,函数体内的 this 同样指向该元素本身:
- 本质是浏览器自动将内联脚本包装成一个以该元素为 this 的函数执行
- 不推荐使用,不利于维护和分离关注点
箭头函数会丢失 this 绑定
箭头函数没有自己的 this,它会沿作用域链向上查找,通常指向外层函数或全局对象(严格模式下为 undefined):
button.addEventListener('click', () => {console.log(this); // 不是 button,而是外层作用域的 this(如 window)
});
- 若需访问触发元素,应使用
event.currentTarget或event.target - 推荐写法:
button.addEventListener('click', (e) => console.log(e.currentTarget))
显式绑定(call/apply/bind)或作为方法调用时需谨慎
如果把事件处理函数赋值给变量再传入,或用 bind 显式绑定 this,原始默认行为会被覆盖:
button.addEventListener('click', handler.bind(document)); // this 指向 document
- 避免对事件处理器做额外
bind,除非明确需要改变上下文 - 若必须复用带 this 的方法(如类中方法),可用
handleClick.bind(this)或 class 字段箭头函数(handleClick = () => { ... })
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










