May 11, 2020

冒泡,捕获;事件绑定,事件监听,事件委托

关于事件监听,W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段、冒泡阶段。事件发生时会先从外到内发生捕获,触发事件后再从内到外进行冒泡。

事件绑定

方案一:为元素直接绑定事件

document.getElementById("btn").onclick = function() {}

但这样的方案存在缺点,即只能执行最后绑定的事件,且不可取消绑定。

方案二:通过 addEventListener 绑定事件

document.getElementById("btn").addEventListener('click', function() {})

这样可以给 DOM 添加多个事件,并且可以通过 removeEventListener 解除绑定。

但新添加的 DOM 元素将无法触发事件。

方案三:事件委托

事件委托就是利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果。这样可以保证新添加的 DOM 元素仍然能够触发事件。

bookmark

  • 每个对象都有 __proto__ 属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用 __proto__ 来访问