Javascript 如何获取每个对象的设置间隔?

Javascript 如何获取每个对象的设置间隔?,javascript,setinterval,Javascript,Setinterval,主语 例如,我有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); }

主语

例如,我有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对象返回user2


如何在10秒内返回user1,在15秒内返回user2

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

 var _self = this;

这是因为闭包是如何工作的。您没有像您所想的那样为每个
setInterval
创建
\u 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
时,每个作用域都有自己的
\u self


还可以考虑查看的文档。

不要使用全局变量。将
自身设置为本地:

var _self = ...;

您的解决方案过于复杂。只需添加
var
就足够了。是的,问题与闭包有关,但实际问题是
\u self
是全局性的。