使用handleEvent属性传递对象与addEventListener

时间:2017-01-10 09:09:32

标签: javascript callback addeventlistener object-literal interface-implementation

我读了一篇文章(link),它解释了addEventListener的seconde参数可以是实现handleEvent方法的函数或对象。

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

谢谢大家!

1 个答案:

答案 0 :(得分:2)

使用对象作为侦听器:

var listener = 
    {
    handleEvent: function (evt) {

        this === listener; // true

        // and evt === classic event object
    }
};


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

具有以下优点:

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

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

     

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

<强>参考