核心方法 delegate, live, bind
现在都转向使用on函数,live在1.9直接删除
最后都使用 jQuery.event.add( this, types, fn, data, selector ); this是原生的HTMLElement
重要的全局属性
jQuery.cache
jQuery.guid
jQuery.cache中的存储
每一个jQuery中的元素添加的事件,都会在jQuery.cache 中存储为一个对象,id值对应为elem[jQuery.expando];
{1: events:Object, handle:function}
1 events
获取$.data(el, "events");
处理函数都存储在这里,对不同的事件类型,有不同数组存储,描述的不好TODO
2 handle 处理函数
elem(prop) 存储的el元素
事件添加的处理函数
elemData.handle = eventHandle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined;};
底层
用addEventListener, attachEvent 添加的是 上面cache对象存储的handle处理函数