如何一次性将多个变量存入数组以调用addLetter方法?
问题分析与解决方案
先帮你拆解下代码里的核心问题,这才是导致你觉得push/concat没生效的原因:
addLetter方法只支持单个参数
你定义的addLetter只接受一个letter参数,但调用时传了a,b,v三个变量——这时候只有第一个参数s会被处理,后面的g和d直接被忽略了,自然看不到它们被存入数组。push后的链式调用错误this.letters.push(letter).join('\n')这行逻辑有问题:Array.push()返回的是数组的新长度(一个数字),不是数组本身,所以你在数字上调用join会直接报错;而且就算能调用,你也没把join的结果存回任何地方,这步操作完全没必要在这里做。
修复后的完整代码
function Team(name) { this.name = name; this.letters = []; } // 改造addLetter,支持接收任意数量的参数 Team.prototype.addLetter = function (...letters) { // 用扩展运算符一次性把所有参数推入数组 this.letters.push(...letters); }; Team.prototype.toString = function () { return "Name of team - " + this.name + '\n' + "letters : " + this.letters.join('\n'); }; var a = 's'; var b='g'; var v='d'; var team1 = new Team('letters'); team1.addLetter(a,b,v); console.log(team1.toString());
关键改动说明
- 支持多参数输入:用剩余参数语法
(...letters)把调用时传入的所有参数收集成一个数组,再通过push(...letters)一次性将所有元素存入this.letters,不管你传多少个变量都能生效。 - 调整join的位置:把
join('\n')移到toString方法里——数组本身应该存储原始字符,字符串拼接是在需要输出的时候做的,这样逻辑更清晰。 - 补全变量声明:你的代码里
b='g'; v='d';没加var(或let/const),补上后避免全局变量污染。
运行修复后的代码,控制台会输出:
Name of team - letters letters : s g d
内容的提问来源于stack exchange,提问作者Igor Shvets
相关产品推荐
相关产品推荐

