EventListener中的handleEvent

在研究代码时发现类似这样一段代码:

 1 function TEST() {}
 2
 3 TEST.prototype = {
 4   init:function() {
 5     window.addEventListener(‘mousedown‘,this);
 6   },
 7   handleEvent:function(e) {
 8     alert(‘mousedown‘);
 9   }
10 };
11
12 new TEST().init();

最初对于第5行不是很理解,为什么可以传一个this作为参数,并且最终还成功地执行了alert方法,毕竟this是一个构造函数而非具体的方法。

后来查阅了相关文档,发现关键之处在于handleEvent这个函数,该函数原本就存在于《DOM2级事件规范》中:

// Introduced in DOM Level 2:
interface EventListener {
  void handleEvent(in Event evt);
};

这个接口规定了handleEvent应该如何实现。也就是说,在使用addEventListener时,第二个参数可以传入一个对象、函数或者像上面的构造函数,在执行该语句时,它会自动

寻找参数中的handleEvent方法并执行,并且this指向这个参数,不会受addEventListener的影响。

目前如何更好地运用这一方式还在探索中。

参考资料:https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener

时间: 2024-10-01 05:13:13

EventListener中的handleEvent的相关文章

javascript 对象中的 handleEvent

在高级浏览器中,我们在绑定事件的时候 可以知道绑定一个对象,然后在这个对象中的 handleEvent 方法会自动进入指定的方法,不多说了举个例子吧!! var events = { handleEvent: function(event) { switch (event.type) { case 'touchstart': this.touchstart(event); break; case 'touchmove': this.touchmove(event); break; case 't

JavaScript事件在WebKit中的处理流程研究

本文主要探讨了JavaScript事件在WebKit中的注册和触发机制. JS事件有两种注册方式: 通过DOM节点的属性添加或者通过node.addEventListener()函数注册: 通过DOM节点的属性添加如下所示,节点的属性采用on后面紧接event name的形式,比如onclick, onload; <html> <head> <script type="text/javascript"> function listener(e){ a

JS中自定义事件的使用与触发

1. 事件的创建 JS中,最简单的创建事件方法,是使用Event构造器: var myEvent = new Event('event_name'); 但是为了能够传递数据,就需要使用 CustomEvent 构造器: var myEvent = new CustomEvent('event_name', { detail:{ // 将需要传递的数据写在detail中,以便在EventListener中获取 // 数据将会在event.detail中得到 }, }); 2. 事件的监听 JS的E

js函数绑定同时,如何保留代码执行环境?

经常写js的程序员一定不会对下面这段代码感到陌生. 1 var EventUtil = { 2 3 addHandler : function(element, type, handler){ 4 if(element.addEventListener){ 5 element.addEventListener(type, handler, false); 6 }else if(element.attachEvent){ 7 element.attachEvent("on"+type,h

addEventListener之listener

addEventListener() 方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行.语法: element.addEventListener(type, listener[, useCapture]); 其中listener:当指定的事件类型发生时被通知到的一个对象.该参数必须是实现EventListener接口的一个对象或函数.即,第二个参数除了可以传入函数外,还可以传入对象. 那么实现EventListener接口的对象有什么特征呢? inte

addEventListener的第二个参数——listener

addEventListener() 方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行.语法: element.addEventListener(type, listener[, useCapture]); 其中listener:当指定的事件类型发生时被通知到的一个对象.该参数必是实现EventListener接口的一个对象或函数. 即,第二个参数除了可以传入函数外,还可以传入对象. 那么实现EventListener接口的对象有什么特征呢? // 注

Java事件第2篇

假如现在有一个Button按钮,Button按钮上有click和doubleclick事件.两个不同的事件需要进行不同的处理,这时候就需要为相应的事件注册Listener了.修改后的目录组织结构如下: 1.事件基本类的编写如下: package com.event.test02; public class Event { public String action; // 事件名称 public String message; // 附加说明 /** * @param action * @para

Azkaban使用的两个设计模式

最近看了看azkaban的代码,发现有两个设计模式比较巧妙,一个是在webServer端处理用户请求的servlet的类结构,一个是在execServer中使用的观察者模式. 1.webServer端的servlet的层次结构 如下图,下面是webServer提供的所有的servlet信息: AbstractAzkabanServlet类继承自HttpServlet,我们一般都是实现doGet和doPost方法(还有针对delete请求的方法等)处理GET和POST请求,在azkaban中需要对

【技术分享】很详细的JS底层分析

1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. 入门学习和参考手册建议翻阅JavaScript.The.Definitive.Guide.5th.Edition的附录(有电子版). 2. 准备设置服务器*.xml的MIME为text/xml ,Windows Xp自带的IIS的设置如下图 js_0000.png Firefox上有许多插件是开发必备的,用法大家Google,我列一下名称 FireBug Web Developer Toolbar Greas