关于事件监听,W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段、冒泡阶段。事件发生时会先从外到内发生捕获,触发事件后再从内到外进行冒泡。
事件绑定
方案一:为元素直接绑定事件
document.getElementById("btn").onclick = function() {}
但这样的方案存在缺点,即只能执行最后绑定的事件,且不可取消绑定。
方案二:通过 addEventListener 绑定事件
document.getElementById("btn").addEventListener('click', function() {})
这样可以给 DOM 添加多个事件,并且可以通过 removeEventListener 解除绑定。
但新添加的 DOM 元素将无法触发事件。
方案三:事件委托
事件委托就是利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果。这样可以保证新添加的 DOM 元素仍然能够触发事件。
- 每个对象都有
__proto__
属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用__proto__
来访问