对象参数/功能和/或三元运算符混淆

时间:2011-04-16 00:21:51

标签: javascript jquery

对于含糊不清的“标题”感到抱歉,但我正在努力想出一个能够简单地捕捉我的问题的标题。

我正在研究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()来获取$ this的下一个兄弟:

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'。但我无法确定任何此类情况。

我没看到什么?

非常感谢, Ñ

1 个答案:

答案 0 :(得分: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