Ich schaue recht gerne in den JS-Code anderer. Hierbei fällt einem neben der Tatsache, dass saubere Organisation von JS selten vorkommt, vor allem die ineffiziente Verwendung von jQuery auf. Hier einige dieser Anti-Patterns:
Ineffiziente CSS-Selektoren:
Beispiel:
$('.nav li a')
Besseres Beispiel:
$('ul.nav a')
Ineffizientes Chaining:
$('#foo').attr('bar', 'baz').attr('bomber', 'boom').addClass('test').addClass('test2');
Besseres Beispiel:
$(‘#foo’)
.attr({
bar: ‘baz’,
bomber: ‘boom’
})
.addClass(‘test test2′);
X-fache Erstellung von jQuery-Objektinstanzen identischen Inhalts (Kein Chaining/Kein “Zwischenspeichern”):
Beispiel:
{ init: function() { $('#foo').addClass('bar'); $('#foo').attr('title', 'hello'); $('#foo').click(myobject.onClick); }, doSomething: function() { $('#foo').attr('title', 'hello again'); $('#foo li').mouseover(myobject.onOver); } };
Besseres Beispiel:
{ init: function() { myobject.myElement = $('#foo') .addClass('bar') .attr('title', 'hello') .click(myobject.onClick); }, doSomething: function() { myobject.myElement .attr('title', 'hello again'); $('li', myobject.myElement[0]) .mouseover(myobject.onOver); } };
Erstellung von Instanzen, die einen nicht interessieren:
Beispiel:
$('#foo').after('<a href="#" id="bar">tut was</a>'); $('#bar').click(tuWas);
Besseres Beispiel:
$('<a href="#" id="bar">tut was</a>') .insertAfter('#foo') .click(tuWas);
Anfordern von Informationen, die einen nicht Interessieren:
(seltenes) Beispiel:
if($('*').index('#foo') == -1){ //tu was }
Besseres Beispiel:
if(!$('#foo').length){ //tu was }