如何使用for循环来调用对象内所有方法中的所有函数?

时间:2016-10-11 00:57:51

标签: javascript object for-loop methods setinterval

我有一个名为'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);
    }
}

1 个答案:

答案 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进行检查