如何将函数中修改的值重置为初始值?示例代码问题解析
解决种族属性加成重置问题
你的问题核心在于每次选择种族时,没有先将属性值恢复到初始状态,而是直接在已修改的值上继续叠加,导致切换种族时加成累积了。咱们可以通过保存初始属性值的方式来解决这个问题。
问题分析
当前代码里,每次选择Dragonborn或Dwarf时,都是直接对页面上的strScore、chaScore、conScore的值做加法操作,但没有记录这些属性的原始初始值(比如你提到的10)。所以当你先选Dragonborn把力量加到12,再选Dwarf时,会在12的基础上继续加体质,而不是回到初始的10再计算。
解决方案:保存初始值,每次切换先重置
我们可以在页面加载时就保存好所有属性的初始值,每次触发种族选择事件时,先把属性值重置为初始值,再应用当前选中种族的加成。
修改后的代码示例:
// 页面加载时保存初始属性值 const initialStats = { str: parseInt(document.getElementById("strScore").value), con: parseInt(document.getElementById("conScore").value), cha: parseInt(document.getElementById("chaScore").value) }; function pRace(playerRace) { var race = playerRace.value; // 第一步:先把所有属性重置为初始值 document.getElementById("strScore").value = initialStats.str; document.getElementById("conScore").value = initialStats.con; document.getElementById("chaScore").value = initialStats.cha; // 第二步:应用当前种族的加成 if (race == 'Dragonborn') { document.getElementById("strScore").value = initialStats.str + 2; document.getElementById("chaScore").value = initialStats.cha + 1; } else if (race == 'Dwarf') { document.getElementById("conScore").value = initialStats.con + 2; } }
关键说明
initialStats对象会在页面加载时记录所有属性的初始值,确保每次切换种族时都能回到最开始的状态。- 每次调用
pRace函数时,先执行重置操作,再根据选中的种族添加对应的属性加成,这样就不会出现叠加问题了。 - 如果后续还有更多种族需要添加,只需要在
else if里继续扩展逻辑即可,重置步骤无需改动。
内容的提问来源于stack exchange,提问作者ray55nl
相关产品推荐
相关产品推荐

