JS点击游戏按钮点击数值不更新且控制台报game未定义错误求助
问题修正方案
你遇到的game is not defined报错本质是JS代码内存在多处语法、拼写错误,导致整个script脚本块解析失败,game变量没有被成功声明。以下是所有问题及对应修正方法:
1. 对象属性分隔符缺失
display对象的updateScore方法结束后没有加逗号分隔下一个方法updateShop,属于JS语法错误,直接导致整个脚本解析失败。
修正方案:在updateScore方法的闭合大括号后添加逗号。
2. 多处拼写错误
所有错误拼写及对应正确写法如下:
game.getScorePerSecond方法中bulding.name→building.namebuilding对象的购买方法名purchse→purchase- 页面加载事件
windown.onload→window.onload - 页面加载事件中调用的
disaply.updateShop→display.updateShop
3. updateShop方法字符串拼接语法错误
你拼接HTML字符串时存在引号嵌套错误、字符串断行未处理、变量拼接语法错误的问题,导致该方法解析失败。
修正后的updateShop方法参考:
updateShop: function() { document.getElementById("shopContainer").innerHTML = ""; for (let i = 0; i < building.name.length; i++) { document.getElementById('shopContainer').innerHTML += `<table class="shopButton unselectable" onclick="building.purchase(${i})"><tr><td id="image"><img src="${building.image[i]}"></td><td id="nameAndCost"><p>${building.name[i]}</p><p><span>${building.cost[i]}</span> films</p></td><td id="amount"><span>${building.count[i]}</span></td></tr></table>`; } }
这里使用ES6模板字符串简化拼接,避免引号混淆问题。
4. 不存在的属性引用
display.updateScore方法中直接调用了game.scorePerSecond,但代码中只定义了game.getScorePerSecond()方法,没有声明对应的属性。
修正方案:将game.scorePerSecond替换为game.getScorePerSecond()。
5. 其他待修正问题
- HTML中
scoreContainer节点内有多余的</p>闭合标签,直接删除即可 - HTML节点上绑定的
buyCursor、buyCamera、resetGame等方法均未定义,你可以删除原有写死的商店HTML(因为updateShop会动态生成商店节点),或者自行补充对应方法实现。
内容的提问来源于stack exchange,提问作者Dominick
相关产品推荐
相关产品推荐

