循环内switch语句无法获取返回值问题求助
解决列车进度循环无法更新实例状态的问题
我看你遇到的核心问题是没有正确操作已创建的列车实例,再加上循环里的逻辑判断写法有误,导致你的trainOne实例始终没有被更新。我来帮你一步步梳理问题,再给出修正后的代码:
原代码的主要问题
- 你每次用
Train()调用构造函数,这会创建一个全新的空列车实例,而不是修改你已经初始化好的trainOne!所有状态更新都丢到了临时实例里,自然看不到效果。 switch语句的写法完全错误:case后面应该是匹配的具体值,而不是elapsedTime == 0这种条件表达式,这种写法根本不会触发对应的分支。- 循环终止条件
elapsedTime < 12看起来和你设定的ETA时间(28、70秒)不匹配,应该是笔误? - 构造函数的参数初始化过于冗余,很多空字符串可以简化处理。
修正后的代码
function Train(speed) { this.speed = speed; this.station = ''; this.eTA = ''; this.elapsedTime = 0; // 根据速度自动设置列车类型 this.type = speed === 30 ? 'Regio' : speed === 70 ? 'Inter-Regio' : 'Broken'; } // 创建具体的列车实例 const trainOne = new Train(30); function updateTrainStatus(elapsedTime) { // 直接操作我们的trainOne实例,而不是新建临时实例 if (elapsedTime === 0) { trainOne.station = 'Station A'; trainOne.eTA = `${28 - elapsedTime} seconds left until reaching the next station`; } else if (elapsedTime < 28) { trainOne.station = 'Train left Station A'; trainOne.eTA = `${28 - elapsedTime} seconds left until reaching the next station`; } else if (elapsedTime === 28) { trainOne.station = 'Station 2'; trainOne.eTA = `${70 - elapsedTime} seconds left until reaching the next station`; } else if (elapsedTime < 70) { trainOne.station = 'Train left Station 2'; trainOne.eTA = `${70 - elapsedTime} seconds left until reaching the next station`; } else if (elapsedTime === 70) { trainOne.station = 'Station 3'; trainOne.eTA = `${84 - elapsedTime} seconds left until reaching the next station`; } else { trainOne.station = 'Station A'; trainOne.eTA = 'No information available yet'; } console.log('Current train status:', trainOne); // 根据需求调整终止条件,这里设置为运行到84秒后停止 if (elapsedTime < 84) { setTimeout(() => updateTrainStatus(elapsedTime + 1), 1000); } } // 启动循环,从0秒开始计时 updateTrainStatus(0);
关键修改点说明
- 操作真实实例:所有状态更新都直接针对
trainOne,不再新建临时实例,这样控制台输出能实时看到实例的变化。 - 替换switch为if-else:因为你的判断是连续的范围条件,
if-else比switch更适配,也避免了原代码的语法错误。 - 简化构造函数:只保留必要的
speed参数,其他属性在构造函数内初始化,代码更清爽。 - 调整循环终止条件:改成匹配你最后一个ETA的时间点(84秒),你可以根据实际需求随时修改。
- 模板字符串优化:用
${}拼接文本,比字符串加号更简洁易读。 - 箭头函数简化定时器:让代码更简洁,同时避免不必要的作用域问题。
现在运行这段代码,你会看到控制台每秒输出trainOne的最新状态,完全符合你每秒更新列车进度的需求啦!
内容的提问来源于stack exchange,提问作者Alin Andrei
相关产品推荐
相关产品推荐

