将“this”传递给window.setInterval()

时间:2017-01-21 18:24:18

标签: javascript setinterval

我的代码如下:

var X = {
  updateAll: function() {
    // ...
  },

  init: function() {
    window.setInterval(function() {
      this.updateAll();
    }, 40000);
  }
}

X.init()中,我希望能够访问updateAll(),但由于显而易见的原因,它无法按预期运行。

我如何达到所需的结果?

4 个答案:

答案 0 :(得分:3)

  init: function() {
    var _self = this;
    window.setInterval(function() {
      _self.updateAll();
    }, 40000);
  }

答案 1 :(得分:0)

你可以这样做。

var X = {
  updateAll: function() {
    console.log('updateALL');
  },
  init: function() {
    var self=this;
    window.setTimeout(function() {
      self.updateAll();
    }, 200);
  }
};

答案 2 :(得分:0)

您可以绑定该功能:

^-?[0-9]\d*$

或者,如果您使用的是ECMAScript 2015,则可以使用箭头功能:

init: function() {
    window.setInterval(function() {
        this.updateAll();
    }.bind(this), 40000);
}

答案 3 :(得分:0)

您可以使用其他答案中提到的var self = this方法, OR 您可以使用函数具有的.bind方法:

var X = {
  updateAll: function() {
    // ...
  },

  init: function() {
    window.setInterval(
      this.updateAll.bind(this),
      40000
    );
  }
}

请注意,您并不需要所有这些" function(){...}"在setInterval的第一个参数中 - 它是多余的。