Javascript 向addEventListener注册的事件存储在哪里?
我从一页空白开始。如果我运行Javascript 向addEventListener注册的事件存储在哪里?,javascript,Javascript,我从一页空白开始。如果我运行document.body.onclick我会得到null。如果我应用以下代码: document.body.onclick = function() { return "Click"; }; 当我运行document.body.onclick时,我得到function(){return“Click”}。这是有道理的!但是当我跑的时候 document.body.addEventListener("click", function() { return "Click
document.body.onclick
我会得到null
。如果我应用以下代码:
document.body.onclick = function() { return "Click"; };
当我运行document.body.onclick时,我得到function(){return“Click”}
。这是有道理的!但是当我跑的时候
document.body.addEventListener("click", function() { return "Click"; });
document.body.onclick
仍然是null
,但当我运行document.body.Click()时,输出是“Click”
所以我的问题是,当使用addEventListener
时,函数存储在哪里?它存储在主体的事件
侦听器的实际列表(数组)中
元素中有一个用于其事件侦听器的函数引用列表。这些引用不在DOM中。触发事件时,浏览器必须遍历所有适当的元素,查找这些引用并按顺序运行它们
无论如何。。。在DOM看不到的背景下,有很多事情正在发生。整个事件系统就是其中之一。整个Javascript引擎本质上是一个大的对象树,用于当前加载的页面,都存储在神秘的内存中。它们通常通过使用文档
和窗口
接口访问,就像DOM一样。但是,正确注册的事件将位于存储在内存中的大型对象树中,这与DOM不同。只是关系密切。我将DOM视为这个大型对象树和HTML本身之间的接口或中间人
继续onclick
仅限于DOM中的一个值或一个javascript字符串。实际上没有注册。因此,不是一个实际的事件侦听器。在这里,DOM有点像一个垫片,因为它支持onclick
字符串作为事件运行。因此,当触发事件时,该字符串也会运行。通过浏览器,在正确的时间,神秘地。大致说来,可以说这是DOM的一部分,它通常会从HTML中填充所有类似这样的行内文本,以便通过文档
访问它。但一般来说,它们只是存储为字符串,而不是树中的实际对象。这可能是DOM如此受欢迎的众多原因之一
而addEventListener
实际上将其注册为真实事件,因此您可以:
- 有倍数
- 作为对象访问它们
- 随意添加和删除它们
- 选择事件传播方案
- 在运行时控制事件传播本身
- 让事件在第一次运行后自动删除自身
。。。以及其他一些功能
对于同一事件,它们都是两个不同的事件侦听器。一个是使用addEventListener
时的完整事件侦听器。另一个只是DOM中的一个文本字符串,浏览器将“在正确的时间”运行该字符串,而不是实际的完整事件侦听器
这个问题可能会给我们一些启示 与.addEventListener
之间的主要区别在于.onclick
设置一个事件处理程序来替换现有的事件处理程序。而不是。addEventListener
向DOM元素添加多个事件处理程序.addEventListener
是添加事件处理程序的现代方法。我不知道它们存储在哪里,但不在onclick
中,因为onclick只保存一个值,而不是一个事件处理程序数组。您可以在此处阅读更多关于此的信息:
因此,答案是,通过获取onlick
的值,您无法通过.addEventListener
添加事件处理程序,它存储在某个地方,但是该存储没有DOM接口,您无法在javascript中访问它。看不到问题的答案,但可以使用查看事件侦听器。