2011-04-16 42 views
0

對不明的「標題」,但我努力想出一個能夠真實地捕捉我的問題。對象參數/功能和/或三元運算符混淆

我正在通過R Murphy的JQuery Fundamentals工作,並被困在她的解決方案中的一段代碼中:slideshow.js

她創建了下面的函數(我爲了把重點放在褪色的圖像和出的核心功能去掉了一些導航代碼):

fadeCallback = function() { 
      if (manualMode) { return; } 

      var $this = $(this), 
       $next = getItem($this, 'next'), 
       num = $this.prevAll().length + 1; 

      // set the timeout for showing 
      // the next item in 5 seconds 
      timeout = setTimeout(function() { 
       showItem($this, $next); 
      }, 5000); 
     }; 

內fadeCallback她所謂的getItem()來得到這個$下一個兄弟:

getItem = function($item, trav) { 
      var $returnItem = $item[trav](); 
      return $returnItem.length ? 
       $returnItem : 
       $items[(trav == 'next') ? 'first' : 'last'](); 
     }, 

在我看來,這裏面getItem()時,在該行...

$items[(trav == 'next') ? 'first' : 'last'](); 

... trav永遠不會不會將成爲'下一個'。即代碼中的其他地方是否將'trav'設置爲'next'以外的任何內容。然而,由於代碼測試trav是否等於'next',這意味着有些情況下trav!='next'。但我無法確定這種情況。

我沒有看到什麼?

提前許多感謝, ñ

+0

不要使用三元運算符,除非你確實真的需要(可能永遠不會)。它只應該是真的,非常簡單的,如果樹木。 – 2011-04-16 00:24:15

+0

@JaredFarrish三元運營商並不那麼糟糕。嵌套的三元操作符是_devil_。 – Raynos 2011-04-16 00:26:02

+0

@Jared:爲什麼不呢? – maerics 2011-04-16 00:26:50

回答

0
$prevBtn = $('<input/>', { 
    type: 'button', 
    value: 'previous' 
}).appendTo($controls), 

$nextBtn = $('<input/>', { 
    type: 'button', 
    value: 'next' 
}).appendTo($controls), 

$prevBtn.bind('click', { direction : 'prev' }, handleBtnClick); 
$nextBtn.bind('click', { direction : 'next' }, handleBtnClick); 

handleBtnClick = function(e) { 
    clearTimeout(timeout); 

    manualMode = true; 

    var $currentItem = $items.filter(':visible'), 
     $itemToShow = getItem($currentItem, e.data.direction); 

    showItem($currentItem, $itemToShow); 
}; 

這顯然被用於prev

+0

呃。我曾經評論過這段代碼,專注於淡化。我從來沒有想過要檢查這一點。對於浪費的帶寬感到抱歉。 – Nick 2011-04-16 04:23:13