看了几天,决定整理一下jQuery事件处理的整体设计思路
1、通过add方法给选中的元素注册事件处理程序(通过缓存系统将事件储存到cache,而不是绑定到元素上)
a、在存储之前,会为事件处理程序增加guid属性(jQuery里的唯一标识),
b、先从cache中取出已经储存的以当前元素为桥梁的对象的events属性,如果没有就新建一个。
c、再从cache中取出已经储存的以当前元素为桥梁的对象的handler属性(是一个方法),如果没有就新建一个。
备注:cache中存储的对象有两个属性:events、handler。
2、通过dispatch方法分派事件处理函数(从缓存中读取出所有的事件处理函数,根据事件类型匹配到对应的事件处理函数)
3、分派逻辑执行之前,通过fix方法封装jQuery的event对象,并在分派逻辑中将新的event对象传入事件处理程序中
4、分派逻辑执行中,调用handler方法组装同一事件的执行队列,handler方法返回一个执行队列
5、执行事件处理函数
仍然存在的疑问:如何监听事件被触发从来开始调用dispatch进行事件处理函数分派工作的。