特别是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/