【问题标题】:Can I pass "this" as a parameter to another function in javascript我可以将“this”作为参数传递给javascript中的另一个函数吗
【发布时间】:2012-03-21 20:38:51
【问题描述】:

我有这个:

$('#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 中的另一个函数吗" --- 可以,它是一个引用当前对象的普通变量。有什么问题吗?
  • $($(this)) 应该只是 $(this)

标签: javascript jquery parameters this


【解决方案1】:

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 example link

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

call()apply() 的区别在于 apply 的第二个参数要么是要传递的参数数组,要么是 arguments 对象。

【讨论】:

  • 我认为问题在于,由于 + 既是数字运算符又是字符串连接,当我尝试将持有“this”的变量与另一个变量相加时,结果是新字符串....我需要解析索引值以将其保留为我认为的数字....谢谢大家,我需要检查所有这些,我会标记适当的响应。
  • 当然不用担心。请记住,尽管其他人会搜索所提问题的标题,所以如果您在标题中标记一个回答问题的答案,对他们最有利。如果将来您确实需要在特定上下文中调用方法,这些是 javascript 语言提供的方法。
【解决方案2】:

您可以像这样将this 传递给另一个函数:

moveToNextImage(this, stepClicked);

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

在你的代码中,这行是什么意思:

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

应该是:

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

【讨论】:

  • 是的,正确...我正在尝试其他带有索引和值的东西..这应该只是 $(this)...kj
猜你喜欢
  • 2021-02-04
  • 2011-01-28
  • 1970-01-01
  • 2015-12-14
  • 2012-10-17
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
相关资源
最近更新 更多