我目前正在观看教程视频“30天学习jQuery”。 我有一个问题,为什么视频中的导师从函数中返回了一个变量。
以下是代码:
这是在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
返回一个值。但为什么呢?
答案 0 :(得分: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])
等。
请告诉我这是否有意义,或者如果您有任何疑问:)
答案 1 :(得分:1)
如果没有看到其余的代码,很难知道,但是通常在对象上设置值的函数会返回一些东西,即使这是违反直觉的,因为它们的目的是设置一个值,而不是获取某些东西。
您将看到的最常见的模式是返回对象本身。允许您一次将多个setter调用链接在一起:
object.setColor("red").setSize("large");
在你的情况下,这并没有特别发生,但是作者可能有类似的用途,因为他想要同时做两件事:设置一个值,并获得一些有关该值的信息已经确定了。