在循环中调用 class 函数

Calling class function in loop

我正在使用 jQuery 并编写了以下代码:

function Test() {
    this.value = '';
    this.someFunction = function() {
        // do something
    }
    this.loopFunction = function() {
        var array = ['one', 'two', 'three'];
        array.foreach(function() {
            // calling someFunction not possible because 'this' is defined as value of loop
            this.someFunction();
        });
    }
}

我的问题是我无法在循环中调用函数 someFunction,因为关键字 'this' 现在被定义为循环的值。有没有办法在不丢失这个 'class' 结构的情况下做到这一点?

您可以使用本机 bind 方法。例如:

array.foreach(function() {
    // calling someFunction not possible because 'this' is defined as value of loop
    this.someFunction();
}.bind(this));

这是一个标准的关闭问题。使用本地变量保存之前的 this.

this.loopFunction = function() {
    vat self = this;
    var array = ['one', 'two', 'three'];
    array.foreach(function() {
        // calling someFunction not possible because 'this' is defined as value of loop
        self.someFunction();
    });
}

在 jQuery 的某些版本中,您可以使用 bind,但我发现这更易于阅读。