Javascript addEventListener中传递具有handleEvent属性的对象与传统回调函数的比较

Javascript addEventListener中传递具有handleEvent属性的对象与传统回调函数的比较,javascript,callback,addeventlistener,object-literal,interface-implementation,Javascript,Callback,Addeventlistener,Object Literal,Interface Implementation,我读过一篇文章,解释了addEventListener的第二个参数可以是实现handleEvent方法的函数或对象 在本文的But wait中有更多的部分,它说使用handleEvent可以避免删除和重新附加事件处理程序。但我想知道,这是否比反复“添加”和“删除”更好?在整洁的代码、性能或其他方面 谢谢大家! 使用对象作为侦听器: var listener = { handleEvent: function (evt) { this === listener

我读过一篇文章,解释了
addEventListener
的第二个参数可以是实现
handleEvent
方法的函数或对象

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


谢谢大家!

使用对象作为侦听器:

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


document.addEventListener("click", listener, false);
具有以下优点:

  • 它将接口与实现分离
  • 它有助于避免对DOM对象的循环引用
  • 它将
    与事件对象隔离
规范作者不应该定义只有一个操作的回调接口,除非需要描述现有API的需求。相反,应该使用回调函数

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

参考资料


使用对象作为侦听器:

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


document.addEventListener("click", listener, false);
具有以下优点:

  • 它将接口与实现分离
  • 它有助于避免对DOM对象的循环引用
  • 它将
    与事件对象隔离
规范作者不应该定义只有一个操作的回调接口,除非需要描述现有API的需求。相反,应该使用回调函数

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

参考资料