对象如何在JavaScript中实现Event接口

时间:2016-11-01 03:30:02

标签: javascript javascript-events addeventlistener

在此.addEventListener in MDN

  

听者

     

发生指定类型的事件时接收通知(实现Event接口的对象)的对象。这必须是实现EventListener接口的对象,或者只是一个JavaScript函数。

它说我们可以使用an object that implements the Event interface作为事件的监听者。

但我无法找到如何反对实现Event接口。我试过了:



document.querySelector('#demo').addEventListener('click', {
  handleEvent: function (e) {
    console.log(e)
  }
}, false)

#demo {
  height: 200px;
  background: #ccc;
}

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="demo"></div>
</body>
</html>
&#13;
&#13;
&#13;

这个可以正确处理点击事件。

也许你可以给我一些关于此的文件。

1 个答案:

答案 0 :(得分:3)

DOM

callback interface EventListener {
  void handleEvent(Event event);
};

IDL Index处描述,其链接到3.6. Interface EventTarget,再次在3.8. Dispatching events

提及
  

inner invoke一个带有事件的对象,请执行以下步骤:Call a user object’s operation并使用侦听器的回调,“handleEvent”,a   由event和event的currentTarget组成的参数列表   属性值作为回调此值。如果这引发了   异常,报告异常。

     

事件监听器可用于观察特定事件。

     

事件监听器由以下字段组成:

     
      
  • 输入(一个字符串)
  •   
  • 回调(一个EventListener)
  •   
  • 捕获(布尔值,最初为假)
  •   
  • 被动(布尔值,最初为假)
  •   
  • 一次(布尔值,最初为假)
  •   
  • 已删除(用于记账的布尔值,最初为假)
  •   
     

虽然回调是EventListener,但可以从中看到   上面的字段,事件监听器是一个更广泛的概念。

引用回EventListener对象,其中handleEvent是唯一的命名属性。

callback interface EventListener {
  void handleEvent(Event event);
}

Web IDL澄清了

  

2.2. Interfaces

     

EventListener作为回调接口的定义是   需要允许用户对象的现有API的示例   要考虑的给定属性(在这种情况下为“handleEvent”)   实现界面。对于新的API,以及那些API   没有兼容性问题,使用回调函数只允许一个   函数对象(在ECMAScript语言绑定中)。

  

callback interface

     

回调接口是一个使用callback关键字的接口   它定义的开始。回调接口可以是   由user objects实现,而不是由平台对象实现,如   在§2.10对象实现接口中描述。

    callback interface identifier {
      /* interface_members... */
    };
     

2.10. Objects implementing interfaces

     

User objects是作者创作,实施的   Web API用来调用的回调接口   作者定义的操作或发送和接收值   作者的程序通过操纵对象的属性。在一个   web页面,一个实现EventListener的ECMAScript对象   interface,用于注册DOM Events的回调   实现调用,将被视为用户对象。

     

请注意,用户对象只能实现回调接口和   平台对象只能实现非回调接口。

例如

document.querySelector('#demo').addEventListener('click', {
  abc: function (e) {
    console.log(e)
  }
}, false)

不会将事件分派给abc处理程序。虽然handleEvent标识符会调度事件。