addEventListener之handleEvent

http://www.cnblogs.com/langjt/p/4324578.html
addEventListener()
方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行。

element.addEventListener(type, listener[, useCapture]);

其中listener:当指定的事件类型发生时被通知到的一个对象。该参数必须是实现EventListener接口的一个对象或函数。即,第二个参数除了可以传入函数外,还可以传入对象。

那么实现EventListener接口的对象有什么特征呢?
interface EventListener {
  // 注意:该接口属于DOM2, 所以IE6~IE8不能直接使用哦~
  void handleEvent(Event evt);
};

也就是说事件会自动在传入对象中寻找handleEvent方法。

1.好处之一

var obj = {
    name: 'foo',
    handleEvent: function() {
       alert('click name='+ this.name);
    }
};
document.body.addEventListener('click', obj, false);

这样在 element 触发event事件后,调用的是handleEvent 方法,且其中的 this 是指实现EventListener接口的对象,这里指向obj对象。而普通的函数中的this 指向事件源:

document.body.addEventListener('click', function() {
console.log(this == document.body); // output: true
 }, false);

2.好处之二

var obj = {
    name: 'foo',
    handleEvent: function() {
       alert('click name='+ this.name);
    }
};
 
document.body.addEventListener('click', obj, false);
 
function changeHandler() {
 obj.handleEvent = function() {
    alert("change the click handle!");
 };
}
 
// 5秒后动态改变事件处理函数
setTimeout(function() {
   changeHandler();
}, 5000);

这样就可以动态切换绑定事件的处理函数,而不需要remove之前的事件。

3.好处之三

var obj = {
    name: 'foo',
    handleEvent: function(e) {
        switch(e.type) {
            case "click":
                console.log("click event");
                break;
            case "mousedown":
                console.log("mousedown event");
                break;
        }
    }
};
 
document.body.addEventListener('click', obj, false);
document.body.addEventListener('mousedown', obj, false);

这样可以把不同事件的处理逻辑放到一起,根据事件类型区分即可,而不用为每个事件类型定义不同的处理函数了。因为处理逻辑都在同一对象中,也使程序更加“内聚”了。

注意

DOM2标准不支持iE6,7,8

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

推荐阅读更多精彩内容

  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,422评论 0 2
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,964评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 谈到指数基金的投资,上次说到“在指数基金进入价值低估区时一次性买入,或定投买入,等待指数随大盘或行业整体回暖,...
    心诚事享阅读 285评论 2 1
  • 每年的这个时候,上班算是一种享受了。终于可以在上班时候放松心情,甚至可以写这篇记录心情的小文儿了。 最近爱上了戏剧...
    Matsa阅读 168评论 0 1