当我们点击鼠标时,它会向操作系统发送信号,通过这种方式,操作系统可以识别哪些资源受到影响并运行事件处理程序。
这个鼠标点击是如何映射到我们在dom对象上的点击事件的?操作系统如何将我们的事件处理程序附加到dom树对象并在事件循环中执行它?
/编辑/
我问这个问题是为了获得具体的硬件资源。内部资源也一样吗?例如:当我们说nodejs服务器监听请求事件并执行事件处理程序时。这里Nodejs运行在操作系统上,http服务器由Nodejs(ip+端口)设置。。那么在这种情况下,哪个资源正在侦听传入请求?
操作系统没有。事件经过一系列层。每一层都比前一层了解更多关于特定层的细节:
- 鼠标处理程序(在操作系统中)将屏幕上X、Y的点击中继到窗口管理器(通常也是操作系统的一部分,但可在各种*nix变体上切换)
- 窗口管理器将单击中继到发生单击的窗口的应用程序
- 窗口中的应用程序(在本例中为web浏览器)将单击中继到事件处理程序
由于浏览器知道DOM,知道单击了哪个DOM元素,因此它可以检查该元素上的事件处理程序,并使用正确的元素调用这些处理程序。
每个层都只有特定于该层的详细信息。鼠标处理程序知道它处理的是哪种鼠标,但窗口管理器和浏览器(可能)不知道(他们可以询问操作系统是否想知道,但通常不必知道。)鼠标处理程序不知道窗口在哪里(甚至不知道是窗口),但窗口管理器知道。窗口管理器不知道DOM元素(以及浏览器的其他部分,如书签栏或类似部分),但浏览器知道。
(上面只是一个非常粗略的草图,涉及到更多的层,但它给了你想法。)