EventTarget - 事件对象接口

EventTarget 是一个由可以接收事件并可能有监听器的对象实现的接口。

Elementdocumentwindow 是最常见的事件目标,但其他对象也可以是事件目标,例如 XMLHttpRequestAudioNodeAudioContext 等等。

许多事件目标(包括元素,文档和窗口)还支持通过 on... 属性来设置事件处理程序

继承关系图

构造函数

EventTarget()

创建一个新的 EventTarget 对象实例。

方法

EventTarget.addEventListener()

EventTarget 上注册特定事件类型的事件处理程序。

EventTarget.removeEventListener()

EventTarget 中删除事件监听器。

EventTarget.dispatchEvent()

将一个事件分派给这个 EventTarget

Mozilla 和 Chrome 代码的其他方法

由 JS 代码实现的事件目标用于实现 on* 属性的 Mozilla 扩展。另请参阅WebIDL 绑定

  • void setEventHandler(DOMString type, EventHandler handler)
  • EventHandler getEventHandler(DOMString type)

实例

EventTarget 的简单实现

var EventTarget = function() {
  this.listeners = {};
};

EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};

EventTarget.prototype.removeEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback){
      stack.splice(i, 1);
      return;
    }
  }
};

EventTarget.prototype.dispatchEvent = function(event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type];

  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};

规范

规范 状态 备注
DOM
EventTarget 的定义
现行的标准 没有更改。
Document Object Model (DOM) Level 3 Events Specification
EventTarget 的定义
已过时 一些参数现在是可选的( listener ),或者接受 null 值(useCapture)。
Document Object Model (DOM) Level 2 Events Specification
EventTarget 的定义
已过时 初始定义。

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 1 支持 1 9 7

10.1

1 — 10.11

EventTarget() 构造函数 64 未知 59 不支持 51 不支持
addEventListener 13 支持 1

9

支持45

7 1
dispatchEvent 4 支持 2

9

支持67

9 3.2
removeEventListener 1 支持 1 9 7 1

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 1 1 支持 4 未知 7

10.1

1 — 10.12

EventTarget() 构造函数 64 64 未知 59 未知 51 不支持
addEventListener 13 13 支持 4 未知 7 1
dispatchEvent 4 4 支持 4 未知 支持 支持
removeEventListener 1 1 支持 4 未知 7 1

1. Window.EventTarget 在 Safari 10.1 之前的版本中不存在。

2. Window.EventTarget 在 Safari iOs 10.1 之前的版本中不存在。

3. 在 Chrome 49 之前,typelistener 参数是可选的。

4. 较早版本的 IE 通过等效的,专有的 EventTarget.attachEvent() 方法来支持。

5. 通过 attachEvent 支持。

6. 较早版本的 IE 通过等效的,专有的 EventTarget.fireEvent() 方法来支持。

7. 通过 fireEvent 支持。

相关链接