2014-01-15 5 views
2

Я унаследовал какой-то совершенно ужасный код от поставщика, и между тем, что я являюсь относительным новичком в Javascript, и жестоким образом это написано, мне удалось полностью уничтожить весь офис, чем это должен означать этот код. Может ли кто-то помочь, переписывая следующее как встроенный оператор IF или что-то более читаемое, чтобы немного изменить поток кода?В чем заключается эта сложная тройная реализация?

a("label.iClass").click(function() { 
     !0 == clickEnabled && (clickEnabled = !1, a(this).hasClass("iT_radio") 
     ? a(this).hasClass("iTon") 
      ? clickEnabled = !0 
      : e(a(this), !0) 
     : e(a(this))); 

     return !1; 
} 

clickEnabled это свойство на пользовательский объект продавец предоставил. Это логическое значение, первоначально определяемое как !0. Нет, я понятия не имею, почему они решили отрицать целые числа, предпочтительнее использовать логическое.

Две части, бросающие меня на самый большой цикл, являются двоичными и предшествуют назначению переменной, а запятая помещается непосредственно после назначения в другой вызов функции. Любой вклад в то, что это могло означать, был бы очень оценен.

+9

Это похоже на сокращенный код. – elclanrs

+0

Это то, что продавец отправил нам после того, как мы специально спросили их о недопустимом коде. – user3199613

+1

Потому что они, вероятно, просто украсили его из мини-кода. '! 0' является' true' и '! 1' является' false'. Назначение выглядит как 'clickEnabled = clickEnabled || ... 'но фальширнее. – elclanrs

ответ

3
a("label.iClass").click(function() { 
    if (clickEnabled == true) { 
     clickEnabled = false; 
     if (a(this).hasClass("iT_radio")) 
      if (a(this).hasClass("iTon")) 
       clickEnabled = true; 
      else 
       e(a(this), true); 
     else 
      e(a(this))); 
    } 
    return false; 
}); 

Где a это предположительно jQuery функция, и e некоторые другие функции в коде.

+2

Guhh, избили меня минутой ...Эта ссылка может помочь: http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/ – Josh

+0

@ thg435: '== true' требуется для того, чтобы быть точным перевод. –

+0

@cookiemonster: может быть, но это не имеет никакого смысла. – georg

0
!0 == clickEnabled && (clickEnabled = !1 

Часть, кажется, говорит: Если щелкнутьEnabled, отключите нажатие - предотвратите двойной щелчок, вероятно.

, a(this).hasClass("iT_radio") 

Запятая следует интерпретировать как список, так и установка clickEnabled == ложь, он будет делать следующую часть, которая должна проверить на наличие iT_radio.

? a(this).hasClass("iTon") 

Если присутствует iT_radio, тогда проверьте, есть ли iTon.

? clickEnabled = !0 

Если iT_radio и Итон присутствует, повторно включить, нажав

: e(a(this), !0) 

Если iT_radio присутствует, но Итон не то е ((это), правда). Я не знаю jquery, поэтому не знаю, что такое функция e.

: e(a(this))); 

Если iT_radio нет, сделайте это e (a (this)). Опять же, не знаю цели функции е.

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