【问题标题】:How do you use a for loop to call all functions inside all methods inside an object?如何使用 for 循环调用对象内所有方法中的所有函数?
【发布时间】:2017-02-19 12:06:57
【问题描述】:

我有一个名为“updater”的计时器,它每秒运行一次。我还有一个对象“particleFunctions”,它的方法中包含多个函数。我希望“particleFunctions”中的所有“更新”函数都能每秒执行一次。

理想情况下,我希望 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);
    }
}

【问题讨论】:

  • 尝试将您的 json 更改为“particle1”(使用引号)而不是particle1。
  • 您的particleX 函数都做同样的事情:将this.update 设置为执行console.log(i) 的函数,但您的代码不会调用particleX() 函数。

标签: javascript object for-loop methods setinterval


【解决方案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 进行检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2019-06-29
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多