读jquery之十(一些瑕疵)

2014-11-24 01:08:55 · 作者: · 浏览: 0

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。

持续更新...