繁体   English   中英

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

[英]Pass “this” into window.setInterval()

我有看起来像这样的代码:

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

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

X.init() ,我希望能够访问updateAll() ,但是由于明显的原因,它无法按预期工作。

如何获得所需的结果?

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

你可以这样

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

您可以绑定函数:

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

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

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

您可以使用var self = this方法在其他的答案中提到, 或者你可以使用的功能有.bind方法:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM