如何为每个对象获取 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 = ...;
主题
我有 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 = ...;