ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget) `EventTarget`是一个 DOM 接口,由可以接收在DOM中出现的事件、并且可以创建侦听器的对象实现 >[danger]在 DOM 中出现的事件是`Event`接口实现 ## 构造函数 [**EventTarget**()](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/EventTarget) 创建一个新的 `EventTarget` 对象实例。【IE不支持】 ## 全部方法 [**1、EventTarget.addEventListener**()](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener) 在EventTarget上注册特定事件类型的事件处理程序。即将指定的监听器注册到 EventTarget 上。可以将事件处理函数绑定到不同的HTML elements上 (比如\<button\>, \<div\>, \<span\>等等)【IE9】 语法: ~~~ target.addEventListener(eventName, listener, options); target.addEventListener(eventName, listener, useCapture); ~~~ [**2、EventTarget.removeEventListener**()](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/removeEventListener) EventTarget中删除事件侦听器。【IE9】 语法: ~~~ target.removeEventListener(eventName, listener[, options]); target.removeEventListener(eventName, listener[, useCapture]); ~~~ [**3、EventTarget.dispatchEvent**()](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/dispatchEvent) 将事件分派到此EventTarget。即触发事件【IE9】 语法: ~~~ cancelled = !target.dispatchEvent(event) ~~~ >[danger] 由于所有的元素对象都继承与它,所以大部分的情况是使用element.addEventListener(eventName, function, useCapture); > element.removeEventListener() > element.dispatchEvent() 如: 当用户重置窗口大小时添加事件监听 ~~~ window.addEventListener("resize", function(){ document.getElementById("demo").innerHTML = Math.random(); }); ~~~ 当传递参数值时,使用"匿名函数"调用带参数的函数: ~~~ document.getElementById("xxoo").addEventListener("click", function(){ myFunction(p1, ~~~ **例子:** ~~~js // 添加一个适当的事件监听器 element.addEventListener("cat", function(e) { process(e.detail) }) // 创建并分发事件 var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}}) element.dispatchEvent(event) ~~~ **例子:** ~~~js //构造函数 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 this.removeEventListener(type, callback); } } }; EventTarget.prototype.dispatchEvent = function(event) { if(!(event.type in this.listeners)) { return; } var stack = this.listeners[event.type]; event.target = this; for(var i = 0, l = stack.length; i < l; i++) { stack[i].call(this, event); } }; ~~~