3

我目前正在观看一个教程视频“学习 jQuery 的 30 天”。我有一个关于为什么视频中的导师从函数返回变量的问题。

这是代码:

这是在 HTML 文件中,它只是将事件处理程序绑定到按钮、调用函数等。

(function() {

    slider.nav.find('button').on('click', function() {
        slider.setCurrent( $(this).data('dir') );
        slider.transition();
    });     
})();

这是我感兴趣的一个函数(在 js 文件中):

Slider.prototype.setCurrent = function( dir ) {
    var pos = this.current;

    pos += ( ~~( dir === 'next' ) || -1 );
    this.current = ( pos < 0 ) ? this.imgsLen - 1 : pos % this.imgsLen;

    return pos; // <== HERE

};

我唯一想弄清楚的是为什么return pos?我尝试删除它,代码仍然有效。

这是一个错误还是有合理的逻辑?

简而言之,setCurrent函数被调用并setCurrent返回一个值。但为什么?

4

2 回答 2

2

我无法推测您的导师为什么这样做,但是一种常见的做法,尤其是在 jQuery 中,是通过根据传递的参数让相同的函数同时作为 setter 和 getter 来重载函数。下面是一个例子:

function (dir)
{
    //If dir was passed as a parameter
    if (typeof dir !== "undefined")
    {
        //Setter code
        value = dir;
    }
    //Getter (always returns value)
    return value;
}

jQuery 中有大量的函数使用它,例如.val, .height,.css('propertyName', [optionallySetValue])等。

让我知道这是否有意义,或者如果您有任何问题:)

于 2013-04-18T00:09:16.910 回答
1

如果不查看其余代码,很难知道,但通常在对象上设置值的函数会返回一些东西,即使这是违反直觉的,因为它们的目的是设置一个值,而不是获取一些东西。

您将看到的最常见的模式是返回对象本身。允许您一次将多个 setter 调用链接在一起:

object.setColor("red").setSize("large");

在您的情况下,这并没有具体发生,但作者可能已经想到了类似的用途,因为他想一次做两件事:设置一个值,并获取有关如何设置该值的一些信息。

于 2013-04-17T23:59:28.547 回答