为什么不在对象循环中调用对象中的函数?

时间:2014-12-01 12:06:13

标签: javascript arrays object for-loop

编辑:问题解决了,我忘了把输出放到riteg对象之前。

好的,所以我很确定如何描述这个问题(这就是为什么标题很糟糕),但这个for循环:

function(){
            var out = 0;
            for(var i = 0;i<gameLists.listAllGen.length;i++){
                out += window[gameLists.listAllGen[i]].output();
            }
            return out/10000;
        },

根本不起作用。在控制台中,它显示:TypeError: window[gameLists.listAllGen[i]].output is not a function

当我用例如[i]替换[0]时,它有效:

function(){
            var out = 0;
            for(var i = 0;i<gameLists.listAllGen.length;i++){
                out += window[gameLists.listAllGen[0]].output();
            }
            return out/10000;
        },

按预期返回,没有错误。

如果需要变量:

var gameLists = {
    listAllGen:['solarGen','riteg']
}

var solarGen = {
    name:"Solar Generator",
    count:0,
    genRate:0.25,
    price:410,
    output:
        function(){
            return this.count*this.genRate*10000;
        },

1 个答案:

答案 0 :(得分:2)

gameLists.listAllGen[0] returns ->  solarGen

并且您的脚本中有solarGen,因此window[gameLists.listAllGen[0]].output()引用输出键,()调用与键solarGen

相关联的函数

但是gameLists.listAllGen[1]返回 - &gt; riteg

并且没有输出属性与riteg,因此它和它所期望的window[gameLists.listAllGen[1]]相关联。有输出作为关键字和与之相关的函数的riteg,但它无法找到它。

因此您收到错误

TypeError: window[gameLists.listAllGen[i]].output is not a function

因为没有该名称的功能。