gpt4 book ai didi

javascript - 事件处理在 JavaScript 内部是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 02:06:54 25 4
gpt4 key购买 nike

特别是Spidermonkey .

我知道您编写函数并将它们附加到事件以处理它们。

onClick 处理程序在哪里定义以及 JS 引擎如何知道在用户单击时触发 onClick 事件?

欢迎提供任何关键字、设计模式、链接等。

更新

我发现在这里有用的聚合链接:

http://www.w3.org/TR/DOM-Level-2-Events/events.html

https://github.com/joyent/node/blob/master/src/node_events.cc

http://mxr.mozilla.org/mozilla/source/dom/src/events/nsJSEventListener.cpp

最佳答案

SpiderMonkey 本身不涉及任何事件处理。事件纯粹是 DOM 的东西。

点击事件由浏览器代码(嵌入 SpiderMonkey 的东西)触发,而不是由 SpiderMonkey 本身触发。参见 http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/content/events/src/nsEventStateManager.cpp用于负责发送诸如点击之类的东西的代码。

浏览器还定义了 setter 方法,这些方法对 onclick 属性进行赋值并将其转换为事件监听器注册。参见 http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/dom/base/nsDOMClassInfo.cpp#l7624它从 nsEventReceiverSH::SetProperty 调用并处理其名称(此代码中的 id)通过 IsEventName 测试的属性。

当事件监听器被注册并触发事件时,事件派发器管理对监听器的调用;您找到的 nsJSEventListener 链接是将 C++ HandleEvent 调用转换为对 JS 函数的调用的粘合剂。

因此,在您的情况下,您需要某种类型的监听器注册/注销机制,然后您的实现将触发事件并将它们分派(dispatch)给监听器。你如何做这最后一部分是开放式的;由于需要实现 DOM 事件规范,Gecko 实现有很多限制,但您应该能够做一些更简单的事情。

关于javascript - 事件处理在 JavaScript 内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5758363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com