1

我读了一篇文章(链接),其中解释了第二个参数addEventListener可以是函数或对象实现handleEvent方法。

在这篇文章的But wait there's more部分中,它说使用handleEvent可以避免删除和重新附加事件处理程序。但我想知道这是否比反复“添加”和“删除”更好?在整洁的代码、性能或其他方面?

谢谢你们!

4

1 回答 1

3

使用对象作为监听器:

var listener = 
    {
    handleEvent: function (evt) {
 
        this === listener; // true
 
        // and evt === classic event object
    }
};


document.addEventListener("click", listener, false);

具有以下优点:

  • 它将接口与实现分开
  • 它有助于避免对 DOM 对象的循环引用
  • this它与 Event 对象隔离

规范作者不应定义只有单个操作的回调接口,除非需要描述现有 API 的要求。相反,应该使用回调函数。

将 EventListener 定义为回调接口是现有 API 的一个示例,该 API 需要允许考虑具有给定属性(在本例中为“handleEvent”)的用户对象来实现接口。对于新的 API,以及那些没有兼容性问题的 API,使用回调函数将只允许一个 Function 对象(在 ECMAScript 语言绑定中)。

参考

于 2017-05-17T01:27:30.290 回答