【问题标题】:addEventListener() as a global functionaddEventListener() 作为一个全局函数
【发布时间】:2017-09-19 08:51:10
【问题描述】:

我刚刚陷入了混乱。
如果假设我将 addEventListener() 实现为全局函数(不像某些特定节点的方法,如 node.addEventListener() ),那么它的行为是否就像通常的全局函数一样,或者在执行代码最终成为方法时会发生某些事情一些特定的节点

注意:定义 addEVentListener 的 DOM 级别 2 规定处理程序注册到节点。那么它注册到哪个节点;窗口对象不是节点

【问题讨论】:

  • 是的,addEventListener 是一个原生方法,在每个兼容 EventListener 的对象上都有原型,创建一个同名的全局函数没有区别
  • @adeneo 但定义 addEVentListener 的 DOM 级别 2 规定处理程序注册到节点。那么它注册到哪个节点;窗口对象不是节点
  • window 对象代表一个包含 DOM 文档的窗口,它本身并不是一个“节点”,但规范说addEventListener 附加到的事件目标可能是文档中的一个元素、Document 本身、一个 Window 或任何其他支持事件 (例如 XMLHttpRequest) 的对象。
  • 哎呀,谢谢你让我们知道事件目标可以是Window,但仍然有一些东西.. 事件目标可以是Window,但是 currentTarget(基础)是什么处理程序已分配(注册)

标签: javascript dom


【解决方案1】:

它将应用于全局对象window(具有函数addEventListener)。因为:

var a = 5;

console.log(a);
console.log(window.a);

因此:

addEventListener( ... );

如果您使用,则完全相同:

window.addEventListener( ... );

【讨论】:

  • 这意味着 DOM 事件侦听器基本上将窗口对象作为基础对象进行操作。是吗?
  • 是的,我知道 window 是与全局执行上下文相关联的全局对象。但是 addEventListener 是由 DOM 级别 2 定义的,它声明处理程序在执行处理程序并且 window 对象不是节点时注册到特定节点。那我该如何调和呢?
  • @Andrew 实现事件监听功能和事件的window 对象inherits from EventTargetwindow 是否为节点无关紧要。它继承自EventTarget,所以它有一个addEvenetListener
  • @Andrew article 中的图片非常完美。 windowbeign 全局对象表示它是作用域链中的最后一个对象(图中最深的灰色矩形)。
猜你喜欢
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多