编辑:问题解决了,我忘了把输出放到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;
},
答案 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
因为没有该名称的功能。