讀jquery之十(一些瑕疵) – JAVA編程語言程序開發技術文章

jQuery1.6.1 發佈有一段時間瞭,發現一些冗餘代碼,列出如下


 


1,bind 方法,最後一個參數fn是多餘的


view sourceprint?1 // Handle object literals 


2 if ( typeof type === “object” ) { 


3     for ( var key in type ) { 


4         this[ name ](key, data, type[key], fn); 


5     } 


6     return this; 


7 }


 


2,註釋


view sourceprint?1 // Add which for click: 1 === left; 2 === middle; 3 === right


應修改為


view sourceprint?1 // Add which for mousedown/mouseup : 1 === left; 2 === middle; 3 === right


 


3,data方法,定義瞭局部變量internalKey,但後續代碼仍然沿用jQuery.expando。


view sourceprint?1 var internalKey = jQuery.expando, getByName = typeof name === “string”, thisCache,


 


4,jQuery.event.add方法,arguments改為e,apply改為call 更好一些。因為隻會傳一個參數:事件對象。


view sourceprint?1 elemData.handle = eventHandle = function( e ) { 


2     // Discard the second event of a jQuery.event.trigger() and 


3     // when an event is called after a page has unloaded 


4     return typeof jQuery !== “undefined” && (!e || jQuery.event.triggered !== e.type) ? 


5         jQuery.event.handle.apply( eventHandle.elem, arguments ) : 


6         undefined; 


7   


8 };


 


5,基於 “勿重復檢測瀏覽器” 原則,jQuery.event.add 以下代碼


view sourceprint?1 if ( elem.addEventListener ) { 


2     elem.addEventListener( type, eventHandle, false ); 


3   


4 } else if ( elem.attachEvent ) { 


5     elem.attachEvent( “on” + type, eventHandle ); 


6 }


應該使用以下來替換


view sourceprint?01 jQuery.addEvent = document.addEventListener ? 


02     function( elem, type, handle ) { 


03         if ( elem.addEventListener ) { 


04             elem.addEventListener( type, handle, false ); 


05         } 


06     } : 


07     function( elem, type, handle ) { 


08         if ( elem.attactEvent ) { 


09             elem.attactEvent( “on” + type, handle ); 


10         } 


11     };


事實上,jQuery中已經有瞭jQuery.removeEvent,卻不知為何沒有jQuery.addEvent。


 


持續更新…


 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *