调用自定义Matrix类构造函数填充矩阵的正确传参方式是什么?
问题根因
Array.prototype.splice 方法的返回值为被删除元素组成的数组,而非修改后的原数组。
现有构造函数执行时,传入16个参数,m.length 为16,对应执行逻辑:
- 生成长度为16、元素全为0的数组
- 调用splice从索引0开始删除16个元素(所有初始0),同时插入传入的16个参数
- splice返回被删除的16个0组成的数组,赋值给
this.m,因此最终矩阵全为0
解决方案
修复构造函数逻辑(推荐)
原构造函数写法存在逻辑错误,调整为先创建数组、执行splice修改,再将修改后的数组赋值给this.m即可:
export class Matrix { constructor(...m) { console.log(...m); // 先创建初始全0数组 this.m = new Array(16).fill(0); // 用传入的参数替换前m.length个元素 this.m.splice(0, m.length, ...m); } toArray() { return [...this.m]; } toString() { return `(${this.m.join(',')})`; } negate(){ } }
修复后使用原有调用方式即可正常填充矩阵:
const mtrx = new Matrix(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
内容的提问来源于stack exchange,提问作者lol nol
相关产品推荐
相关产品推荐

