我有一个名为'updater'的计时器,每秒运行一次。我还有一个对象'particleFunctions',它的方法中包含几个函数。我希望'particleFunctions'中的所有'update'函数都能执行第二次。
理想情况下,我希望console.log每秒输出此消息:
0
1
2
var updater = setInterval(createParticles, 1000);
var particleFunctions = {
particle0 : function(i){
this.update = function(i){
console.log(i);
}
},
particle1 : function(i){
this.update = function(i){
console.log(i);
}
},
particle2 : function(i){
this.update = function(i){
console.log(i);
}
}
}
function createParticles(){
for (var i = 0; i < Object.keys(particleFunctions).length; i++){
particleFunctions['particle' + i].update(i);
}
}
答案 0 :(得分:1)
不确定你想要调用i
的位置,但是像这样的东西可以解决这个问题:
var particleFunctions = {
particle0 : function(i){
this.update = function(){
console.log(i);
}
return this;
},
particle1 : function(i){
this.update = function(){
console.log(i);
}
return this;
},
particle2 : function(i){
this.update = function(){
console.log(i);
}
return this;
}
}
function createParticles(){
for (var i = 0; i < Object.keys(particleFunctions).length - 1; i++){
particleFunctions['particle' + i](i).update();
}
}
var updater = setInterval(createParticles, 1000);
主要问题是particleFunctions['particle' + i]
会返回一个函数,因此您必须调用它才能按顺序调用update
。
此外,您的Object.keys(particleFunctions).length
提供的索引超出界限,因此我添加- 1
进行检查