事件委托是一种提高程序性能,降低内存空间的技术手段,它利用了事件冒泡的特性,只需要在某个祖先元素上注册一个事件,就能管理其所有后代元素上同一类型的事件。
用一个例子来描述委托,先创建一个HTML文档,包含一个容器元素

,以及它的3个子元素。
<div id="delegation">
<button type="button">提交</button>
<button type="button">返回</button>
<button type="button">重置</button>
</div>

然后只要给容器元素注册点击事件,它的3个子元素也就能执行这个点击事件,这其实就是一种委托,再通过事件对象的target属性,就能分辨出当前运行在哪个事件目标上。

var container = document.getElementById("delegation")
container.addEventListener("click",function(event)
{
    event.target;
},false);

使用委托后就能避免对容器中的每个子元素进行事件注册,并且如果在容器中动态添加子元素,新加入的子元素也能使用容器元素上注册的事件,而不用单独绑定一次事件处理程序。

currentTarget 和 target的区别
target属性指向的是事件目标,currentTarget指向的是正在处理当前事件的对象,发生事件传播时,target指向的可能不是定义时的事件目标,而currentTarget始终指向定义时的事件目标。
例如target可能指向三个不同的button,而currentTarget始终指向div。