1

几天前,我为我和朋友一起玩的一款名为《Broken History》的游戏制作了一个领主生成器,我自己开始了代码,但最终得到了代码的帮助来完成它。

然后我开始为同一个游戏制作一个字符生成器,​​使用与以前完全相同的方法,一切看起来都很好,每个元素都做了它应该做的事情。但是,当我第一次获得结果文本时,变量 curFaction 被调用,它undefined在第二次读取用户在选择框中选择的派系时读取,即Saxathia. 变量是在$(document).ready()函数中赋值的,所以理论上应该在调用之前赋值对吗?

我想不出为什么会发生这种情况,变量被称为数组的一部分,这有什么区别吗?

在此处输入图像描述

这是 jsLint http://jsfiddle.net/CYe8J/31/

4

1 回答 1

1

您的问题是您在页面加载时设置字符描述字符串,在用户选择派系之前。

// curFaction is undefined here, as user cannot select a faction 
// *before* the page is loaded!!
var aLevel[1] = "Description1 of guy from " + curFaction + ".";

最快的解决方法是在需要时生成描述。一种方法是将函数存储在 中aLevel,而不是字符串,如下所示:

var aLevel[1] = function () { "Description1 of guy from " + curFaction + "."; };
var aLevel[2] = function () { "Description2 of guy from " + curFaction + "."; };
var aLevel[3] = function () { "Description3 of guy from " + curFaction + "."; };

然后,当您需要您的描述时,调用该函数:

// Original code:
"Stuff about claim on throne. " + aLevel[temp6] + ".";

// New code - note brackets after "aLevel[temp6]"
"Stuff about claim on throne. " + aLevel[temp6]() + ".";

创建了一个 Fiddle 来展示这一点。

顺便说一句,您的代码通常可以重构很多 - 通常,如果您发现自己一遍又一遍地编写相同的算法,那么您需要记住DRY 原则:)

于 2012-10-04T09:48:21.340 回答