在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
event.target始终指向用户直接交互的最底层dom元素,event.currenttarget则指向当前执行事件处理函数的绑定元素;前者固定不变,后者随事件传播阶段动态变化,委托场景中必须用target定位真实点击目标。

用 event.target 区分事件触发源和当前响应元素,核心是理解两者的本质差异:前者永远是用户真正点击/交互的那个最底层 DOM 元素,后者是绑了监听器、正在执行函数的那个元素——哪怕它们看起来是同一个节点。
target 是谁点的,currentTarget 是谁在收
event.target 在事件派发那一刻就已确定,不管事件处于捕获、目标还是冒泡阶段,它始终指向最初被操作的元素。比如点击一个按钮内的图标,target 就是那个 <i></i> 标签。
event.currentTarget 则随事件传播动态变化,它总等于当前正在运行事件处理函数的那个绑定元素。在冒泡中,如果监听器挂在父容器上,那么 currentTarget 就是那个父容器,和 this 完全等价。
实际场景中的对比写法
假设 HTML 结构如下:
- 苹果
- 香蕉
在 #list 上监听 click:
- 点击“苹果”文字 →
event.target是<li>(或其内部的文本节点),event.currentTarget是<ul></ul> - 点击空白处但仍在
<ul></ul>内 →target可能是<ul></ul>自身,此时两者相同 - 若给
<li>单独也加了监听器,再点它 → 两个属性都指向该<li>
为什么不能只靠 this 或 currentTarget 判断源头
因为 this 和 currentTarget 都会随委托层级改变,无法反映真实交互位置:
- 在事件委托中,你通常只在父级绑一次监听,但需要知道具体点的是哪个子项 —— 这时必须读
event.target - 如果子项内还有嵌套(比如
<li><span>内容</span></li>),target可能是<span></span>,需用target.closest('.item')找到最近的语义化父级 - 直接用
this.classList只能得到父容器的类名,不是用户真正点的那个元素的类名
安全获取 target 的常用模式
避免 target 为文本节点或 null 导致报错:
- 检查是否为元素节点:
if (e.target.nodeType === Node.ELEMENT_NODE) - 取类名推荐写法:
e.target?.classList?.value或e.target?.className - 判断是否含某类:
e.target?.classList?.contains('active') - 向上查找目标元素:
const item = e.target.closest('.item'),比反复判断 tagName 更健壮
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










