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