在JavaScript中,我能否将“this”作为参数传递给另一个函数?

14

我这里有这个:

$('#slider li').click(function () {
    var stepClicked = $(this).index();
    alert(stepClicked);
    if (stepClicked != 0) {
        $('#cs_previous').removeClass('cs_hideMe');
    } else {
        $('#cs_previous').addClass('cs_hideMe');
    }

    $('li.cs_current').removeClass('cs_current');
    $($(this)).addClass('cs_current');


    moveToNextImage(stepClicked);

    function moveToNextImage(stepClicked) {
        alert(stepClicked);
        var currentIs = $('li.cs_current').index();
        var newLeftEdge = currentIs - stepClicked;
        $('.cs_riskStageImage').fadeTo(200, .2).animate({
            left: newLeftEdge
        }, "fast").fadeTo(200, 1);
    };
});

警报显示了单击的li的正确索引,并且当我在调用的最后一个函数内警报变量moveToNextImage(stepClicked)时,相同的值就会显示出来,但动画却没有发生。这在许多其他方式中都有效,但我正在尝试传递被单击列表项的索引值以供计算使用。

...或者我可以将该值转换为第一个函数中的另一个变量,然后将其传递给第二个函数吗?


“this” 可以作为参数传递到 JavaScript 中的另一个函数吗?是的,它是一个普通变量,具有对当前对象的引用。有任何问题吗? - zerkms
http://www.quirksmode.org/js/this.html - zod
1
$($(this)) 应该被改为 $(this) - gen_Eric
2个回答

13

JavaScript的函数call()apply()都是用于在特定上下文中调用函数的。

function sum() { 
    return this.num1 + this.num2; 
} 

function callSum(num1, num2) { 
    this.num1 = num1
    this.num2 = num2
    return sum.call(this);       //call sum() in the context of this 
} 

alert(callSum(10, 15)); 

function applySum(num1, num2) { 
    this.num1 = num1
    this.num2 = num2
    return sum.apply(this);   //call sum() in the context of this 
} 

alert(applySum(30, 45)); 

jsfiddle示例链接

现在,在sum()函数中,this关键字具有与callSum()applySum()函数中相同的上下文。

call()apply()之间的区别在于,apply的第二个参数可以是要传递的参数数组或一个arguments对象。


我认为问题所在是,由于“+”既是数字运算符又是字符串连接符,所以当我尝试将保存“this”的变量与另一个变量相加时,结果就会变成一个新的字符串...我需要解析索引值以保持它是一个数字。谢谢大家,我需要仔细研究所有这些,并标记适当的响应。 - kelly johnson
没问题。不过要记住,其他人会搜索问题的标题,所以如果你标记一个回答来回答标题中的问题,对他们最有益。如果将来需要在特定上下文中调用方法,这些就是JavaScript语言提供的方法。 - Duncan Gravill

5
您可以像这样将this传递给另一个函数:
moveToNextImage(this, stepClicked);

function moveToNextImage(obj, stepClicked) {
   var index = $(obj).index;
}

在你的代码中,这行是什么意思:
$($(this)).addClass('cs_current');

应该是:

$(this).addClass('cs_current');

是的,正确的...我正在尝试使用w/index和values进行其他尝试..这应该只是$(this)...kj - kelly johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接