2011-02-07 3 views
1

В этот уик-энд я прочитал следующее в Интернете, и я хотел знать, считают ли большинство других это правильным (лучшим) способом делать вещи.JavaScript Анонимные функции

Это не самый лучший (справа) способ делать вещи:

 
$(document).ready(function() { 
    $('#magic').click(function(e) { 
     $('#yayeffects').slideUp(function() { 
      // ... 
     }); 
    }); 

    $('#happiness').load(url + ' #unicorns', function() { 
     // ... 
    }); 
}); 

То, что это лучше:

 
var PI = { 
    onReady : function() { 
     $('#magic').click(PI.candyMtn); 
     $('#happiness').load(PI.url + ' #unicorns', PI.unicornCb); 
    }, 
    candyMtn : function(e) { 
     $('#yayeffects').slideUp(PI.slideCb); 
    }, 
    slideCb : function() { ... }, 
    unicornCb : function() { ... } 
}; 

$(document).ready(PI.onReady); 

ли выполнить один лучше, чем дальше? Легче для отладки?

Мысли? Комментарии?

+3

Пара вещей: (1) Это сформулировано так, чтобы сказать: «B лучше, чем A. Что вы думаете?» который задает вопрос. (2) Вы не утверждаете, почему вы чувствуете, что второе лучше, несмотря на то, что это так. –

+0

Просто FYI, но в более поздних версиях jQuery ['$ (function() {...})'] (http://api.jquery.com/jQuery/#jQuery3) эквивалентно '$ (document). готовы (функция() {...}) ' –

ответ

0

Второй вариант - многоразовый - вы можете повторно использовать слайдер Cb и другие обработчики для других событий для других элементов управления.

1

Если у вас есть stacktrace с множеством анонимных функций, требуется значительно больше времени, чтобы узнать, где именно произошла ошибка и откуда она была вызвана. поэтому плюс 1 для второго.

Код внутри обработчика событий часто не имеет особого отношения к коду, в котором обработчик регистрируется и поэтому должен находиться в отдельной функции/модуле. плюс 1 для второго.

Использование анонимных функций для слушателей также плохо, потому что, если вам нужно удалить этих слушателей (большинство из них не заботятся), вы можете удалить только их, и вам не нужно заботиться о случайном удалении другой формы слушателей другие части кода. плюс 1 для второго.

Включение связанных функций в один объект не обязательно является лучшим. В основном функция onReady плоха, если вы используете поведение слушателей для разных объектов dom.

не заботясь о производительности. слушателя обычно не называют так часто, что это имеет значение. Если это так, скорее всего, проблема в другом месте.

Смежные вопросы