原型函数中every方法异常求助:ableToMoveAll返回错误结果
解决自定义数组原型方法中
every返回undefined导致的错误 你遇到的问题核心很清晰——在ableToMoveAll方法的every回调函数里缺少了返回语句,导致回调每次执行完默认返回undefined,而every会把undefined当作false处理,所以无论实际情况如何,整个方法都会返回false。
修复代码
只需要在回调函数里返回el.ableToMove(dist)的结果即可:
Array.prototype.ableToMoveAll = function(dist){ return this.every(function(el){ return el.ableToMove(dist); // 添加return返回判断结果 }); }
或者用更简洁的箭头函数写法,可读性更强:
Array.prototype.ableToMoveAll = function(dist){ return this.every(el => el.ableToMove(dist)); }
原因解释
Array.prototype.every的工作逻辑是:遍历数组中的每个元素,执行你传入的回调函数。只有当**所有回调都返回true**时,every才会返回true;只要有一个回调返回false(或者被视为false的值,比如undefined、null、0等),every就会立即返回false。
你之前的回调函数没有写return,函数执行完默认返回undefined,这个值在布尔判断里会被转换成false,自然导致ableToMoveAll永远返回false。
测试验证
现在你可以用以下代码验证修复效果:
console.log(SQUADS.ableToMoveAll(30)); // 所有小队当前能量都≥30,返回true console.log(SQUADS.ableToMoveAll(60)); // 士兵和机器小队能量只有50,返回false
这样就能得到符合预期的结果了。
内容的提问来源于stack exchange,提问作者LionKing
相关产品推荐
相关产品推荐

