使用constructor构造函数实现prompt两数求和时仅读取第一个输入值问题
问题原因
你的代码存在3个核心逻辑错误:
- 执行顺序颠倒:
read方法里先执行求和计算,再给存储输入值的变量赋值,第一次调用时this.x还未定义,计算结果为NaN - 没有存储两次输入的有效状态:仅用一个
this.x存储输入值,第二次调用read会直接覆盖第一次的输入结果,无法拿到两个数做完整运算 - 冗余逻辑错误:求和代码后多余的代码块+return语句,导致求和逻辑永远不会生效,每次调用
read只会给this.x赋值然后直接结束
修正后代码(兼容你原有的初始化固定加数逻辑)
function Num (firstNum) { this.firstNum = firstNum; this.total = firstNum; this.read = function() { // 每次调用读取一次输入,直接累加到总和 const inputVal = +prompt('请输入数字'); // 兼容非数字输入,默认加0 this.total += isNaN(inputVal) ? 0 : inputVal; }; } let num = new Num(10); num.read(); num.read(); alert(num.total);
如果你不需要初始化固定加数,纯求两个用户输入数字的和,可以用下面的版本:
function Num () { this.inputs = []; this.read = function() { const inputVal = +prompt('请输入数字'); this.inputs.push(isNaN(inputVal) ? 0 : inputVal); }; this.getSum = function() { return this.inputs.reduce((prev, curr) => prev + curr, 0); } } let num = new Num(); num.read(); num.read(); alert(num.getSum());
内容的提问来源于stack exchange,提问作者Roman Chernyakhovskyi
相关产品推荐
相关产品推荐

