如何为每个对象获取 setInterval?

How get setInterval for every objects?

主题

我有 javascript 代码,示例

var User = function(data){
  this.name = data.name;
  this.delay = data.delay;
  this.say();
}

User.prototype.say = function(){
  _self = this;
  setInterval(function(){
    console.log(_self.name);
  }, this.delay * 1000);
}



var u1 = new User({name: "user1", delay: 10});
var u2 = new User({name: "user2", delay: 15});

u1 和 u2 对象 returns user2.

如何 return user1 通过 10 秒和 return user2 如何通过 15 秒?

看起来 setInterval 函数正在使用 _self 的缓存版本。尝试这样做:

 var _self = this;

发生这种情况是因为闭包的工作方式。您没有像您想的那样为每个 setInterval 创建 _self 的新副本,因为该变量在全局范围内,因此最后创建的会覆盖第一个值。

试试这个:

var User = function(data){
  this.name = data.name;
  this.delay = data.delay;
  this.say();
}

User.prototype.say = function(){
  var _self = this;
    setInterval(function(){
      console.log(_self.name);
  }, this.delay * 1000);
}

var u1 = new User({name: "user1", delay: 10});
var u2 = new User({name: "user2", delay: 15});

每次调用匿名函数都会创建一个新的本地范围,对于其中创建的每个闭包都是新的,因此,当您添加 var 时,每个范围都有自己的 _self 值在它之前。

也请考虑查看 Bind() 的文档。

不要使用全局变量。将 _self 设为本地:

var _self = ...;