Javascript 返回带参数的方法调用时无法更新类变量

Javascript 返回带参数的方法调用时无法更新类变量,javascript,methods,scope,es6-class,Javascript,Methods,Scope,Es6 Class,当用户单击按钮时,我正在尝试更新carousel类中的变量。由于我还需要在某个阶段更新另一个变量,我希望“cycleThrough”方法接受参数: 但是,当使用参数时,它不会更新我的变量。如果我用实际变量替换方法中的参数,它确实有效 import $ from "jquery"; class carousel { constructor() { this.varOne = 0; this.len = 3; this.updateOnC

当用户单击按钮时,我正在尝试更新carousel类中的变量。由于我还需要在某个阶段更新另一个变量,我希望“cycleThrough”方法接受参数:

但是,当使用参数时,它不会更新我的变量。如果我用实际变量替换方法中的参数,它确实有效

import $ from "jquery";

class carousel {

    constructor() {
        this.varOne = 0;
        this.len = 3;

        this.updateOnClick();
    }

    updateOnClick() {
        const that = this;
        $(".testButton").click(function(){          
            that.cycleThrough(that.varOne, that.len); 
        });
    }

    cycleThrough(toCycle, forLength) {
        if(toCycle > forLength) {    
            return toCycle = 0;
        } else {
            return toCycle++;
        }
    }

}

export default carousel;

您的
cycleThrough
函数返回一些内容(
toUpdate
),但从未使用过。国家永远不会改变

您可以更改
更新单击
功能,如下所示:

updateOnClick() {
  $('.testButton').click(() => { 
    this.varOne = this.cycleThrough(this.varOne, this.len);
  });
}

但实际上,这段代码或类可以进一步得到极大改进

对我来说似乎很有效,我只添加了一个
控制台.log
来输出
cycleThrough的结果
:我必须更新cycleThrough方法中的变量以匹配参数,但我仍然没有更新this.len变量。我理解这不是最好的方法,但从学术角度来看,为什么这不起作用?如果你想增加
varOne
len
,那么你需要实际增加那些
参考。当您调用
that.cycleThrough
时,将复制传递给它的参数。未传递
引用
,而
循环通过
函数在“新”副本上工作。不在
this.len
this.varOne
上。要更新
varOne
len
您需要将其指定为@jkris answered,或更改
返回循环
行,以便它们更新
this.len
this.varOne
。要克服
的关闭问题,只需将代码更改为:
$(“.testButton”)。单击(()=>{
并删除所有
表示歉意的
,“toUpdate”变量应为“toCycle”参数。