addEventListener中的EventListener接口对象

写在最前

遗漏的知识点:addEventListener的第二个参数不光可以传入一个函数,还可以传入一个实现了EventListener 接口的对象。

文档中的描述

listener

当所监听的事件类型触发时,会接收到一个事件通知(实现了 Event 接口的对象)对象。listener 必须是一个实现了 EventListener 接口的对象,或者是一个函数

摘自MDN

我一直都是在listener中传入一个函数,通过监听事件发生来实现一些逻辑。然而看到文档描述中先提到了“一个实现了EventListener接口的对象”通过进一步查看文档了解到,这个对象指的就是一个含有handleEvent方法的对象。

var obj = {
   // ...
    handleEvent: function(event) {
        // ...
        console.log('event', event)
    }
}
document.body.addEventListener('click', obj, false)

EventListener所注册的事件发生时,该方法就会被调用,同时会有一个event参数传入到方法中。

了解了概念之后就要看这个知识点能为实际开发带来什么好处了

开发中的应用

举个🌰

var obj = {
    a: 1,
    handleEvent: function(event) {
        alert(this.a)
    }
}
document.body.addEventListener('click', obj, false) // 1
document.body.addEventListener('click', obj.handleEvent, false) // undefined

从例子中可以看出,这种绑定obj会影响this的指向。也就是说我们可以利用这种特点,在处理事件时使用obj中的私有属性或方法

再举个🌰

var obj = {
    a: 1,
    handleEvent: function(event) {
        alert(this.a)
    }
}
var anotherHandler = function(event) {
    alert('hello world')
}
document.body.addEventListener('click', obj, false) // 1
setTimeout(function(){
    obj.handleEvent = anotherHandler // hello world
},2000)

从这个例子中可以看出,这种形式的事件绑定,很方便就能动态改变处理事件的逻辑。不需要先remove再add。

写在最后

这种绑定方式的缺点不在于兼容性方面,应该是可读性方面的缺陷。我在看别人的源码时看到这个时非常疑惑(个人水平有限也占一定的原因),直到查阅了资料之后才知道有这样的一种绑定事件的写法。

所以,日常工作开发中要使用这样的写法时,最好确定一下一起开发的小伙伴是不是也清楚这种方式,避免协作时的冲突。

参考

MDN EventListener

MDN EventTarget.addEventListener()

handleEvent与addEventListener

惯例

本篇原文出自 Roy's Blog

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 16,023评论 2 11
  • 事件绑定的方式 给 DOM 元素绑定事件分为两大类:在 html 中直接绑定 和 在 JavaScript 中绑定...
    Bruce_zhuan阅读 1,061评论 0 6
  • 那是一个艳阳天,太阳快下山了,父亲从外面拍照片回来,全身汗流浃背,满脸的疲惫。姥姥告诉他,妈妈快生了,爸爸一听又惊...
    e1ca39a45f6c阅读 189评论 0 0
  • 给大家讲故事:传说企鹅以前是会飞的,有只母企鹅因为翅膀短飞不起来。大批企鹅飞走了,一只公企鹅决定留下来陪她。为了找...
    王德彪阅读 177评论 0 0