addEventListener的第二个参数——listener

addEventListener() 方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行。
语法:

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

其中listener:当指定的事件类型发生时被通知到的一个对象。该参数必是实现EventListener接口的一个对象或函数。

即,第二个参数除了可以传入函数外,还可以传入对象。

那么实现EventListener接口的对象有什么特征呢?

// 注意:该接口属于DOM2, 所以IE6~IE8不能直接使用哦~

interface EventListener {

void handleEvent(Event evt);

};

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

这样做的好处之一

1 var obj = {
2     name: ‘foo‘,
3     handleEvent: function() {
4        alert(‘click name=‘+ this.name);
5     }
6 };
7 document.body.addEventListener(‘click‘, obj, false);

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

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

好处之二

 1 var obj = {
 2     name: ‘foo‘,
 3     handleEvent: function() {
 4        alert(‘click name=‘+ this.name);
 5     }
 6 };
 7
 8 document.body.addEventListener(‘click‘, obj, false);
 9
10 function changeHandler() {
11  obj.handleEvent = function() {
12     alert("change the click handle!");
13  };
14 }
15
16 // 5秒后动态改变事件处理函数
17 setTimeout(function() {
18    changeHandler();
19 }, 5000);

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

总结:

使用这种绑定对象的方式,而不是和具体的函数耦合,更有面向对象的感觉了,呵呵。
有理解错误的地方,还望大家多多指教~

时间: 2024-08-13 17:57:47

addEventListener的第二个参数——listener的相关文章

addEventListener 的三个参数

addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click"):第二个参数表示要接收事件处理的函数:第三个参数为 useCapture,本文就讲解它. <div id="outDiv">   <div id="middleDiv">     <div id="inDiv">请在此点击鼠标.</div>   </div> <

js中addEventListener第三个参数涉及到的事件捕获与冒泡

js中,我们可以给一个dom对象添加监听事件,函数就是 addEventListener("click",function(){},true); 很容易理解,第一个参数是事件类型,比如点击(click).触摸(touchstart), 第二个参数就是事件函数, 比如我给一个button添加alert函数. window.onload=function(){ document.getElementById("hello").addEventListener("

[ jquery 过滤器 nextUntil([exp|ele][,fil]) ] 此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,方法返回 selector 与 stop 之间的每个元素之后的所有同级元素,并且提供第二个参数来用于实现过滤效果,多个参数使用逗号相隔

此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,方法返回 selector 与 stop 之间的每个元素之后的所有同级元素,并且提供第二个参数来用于实现过滤效果,多个参数使用逗号相隔,参数解释如下: 概述: 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止. 如果提供的jQuery代表了一组DOM元素,.nextUntil()方法也能让我们找遍所有元素所在的DOM树,直到遇到了一个跟提供的参数匹配的元素的时候才会停下来.这个新jQuery对象里包含了下面所有找到的同辈元素

JavaScript中使用函数做replace的第二个参数

通过第一个例子来全面看下作replace第二个参数的函数的参数....听起来是有点绕→_→ 例: //第一参数为正则表达式 1 var url = "http://www.softwhy.com/forum.php?mod=viewthread&tid=14743&extra=page%3D1"; 2 console.group("正则表达式"); 3 var regexp_global = /[?&](\w+)=([^&]*)/g;

GetMessage的第二个参数

疑问 为什么GetMessage的第二个参数制定为hwnd后,应用程序无法退出? 解释 MSDN中指出: 当第二个参数为NULL时,GetMessage取得那些属于调用线程的窗口的消息和通过PostThreadMessage函数投递到调用线程的线程消息. GetMessage需要检索到WM_QUIT返回一个FALSE结束消息循环, 而WM_QUIT是通过PostQuitMessage发送, 属于线程消息, 而非普通的窗口消息. 如果在GetMessage中用hWnd而不是NULL, 虽然WM_Q

jQuery()方法的第二个参数

关于jQuery()方法的第二个参数,有下面这几种用法: 1.jQuery(selector, [context]) 这种用法,相当于 $(context).find(selector) 或者 context.find(selector) 2.jQuery(html, [ownerDocument]) 文档对ownerDocument的解释是:“创建DOM元素所在的文档” 也就是说,如果你要编写挎document的脚本,比如iframe或者用window.open开一个新窗口,可能会用得着它 3

getAttribute()方法的第二个参数

对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径时,这两者的结果在不同浏览器会有一些不同哦. 以此为例: var img=document.getElementById('logo'); alert("src:"+img.src); // iE7-: src:http://localhost/test/images/logo.png /

js中parseFloat(第一个参数,第二个参数)中第二个参数的解释

今天在看jquery的时候里面用到了parseFloat(第一个参数,10),一直不懂第二个参数是什么意思,于是上网查了一下,怕以后忘记就转了下来. 定义和用法:parseFloat() 函数可解析一个字符串,并返回一个浮点数. 语法:parseFloat(string),参数string是必须的,表示要被解析的字符串 返回值:返回解析后的数字 注意事项: 1.开头和结尾的空格是允许的. 2.如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN 3.如果只想解析

parseInt神秘的第二个参数

前阵子在stackOverflow上看到两个这样的问题: 为什么parseInt(8,3) == NaN,parseInt(16,3) == 1? 为什么parseInt('dsff66',16) == 13? parseInt大家应该都很熟悉了,我们一般用他来把一个小数或字符串转换为整数,正常情况下我们都是这样做的: parseInt(11.2)//返回11 parseInt(‘13’)//返回Number类型的13 但是parseInt的第二个参数很多朋友就不太清楚了,因为本身就很少使用第二