继承Shape类的Square类无法获取sideLength值问题排查
问题原因
你写的Square类构造函数调用super()时参数传错了。Shape的构造函数需要三个参数:_name、_sides、_sideLength,但你只传了_sideLength,这会导致Shape构造函数里把你传的5赋值给this.name,而this.sides和this.sideLength都变成了undefined。虽然你之后手动设置了this.name和this.sides,但this.sideLength始终没被正确赋值,所以调用calcArea时自然拿不到有效值。
修正方案
调用super()时传入Square预设的name、sides,再加上用户传入的sideLength即可:
class Square extends Shape { constructor(_sideLength) { // 按Shape构造的参数顺序传入:预设的name、sides,以及用户传的sideLength super('square', 4, _sideLength); // 这里不需要再重复赋值name和sides了,super已经帮你完成了 } }
测试验证:
const newSquare = new Square(5); newSquare.calcArea(); // 输出20(注:这是正方形的周长,原Shape的calcArea逻辑是计算周长)
顺带提一句,原Shape类的calcArea方法逻辑是计算多边形周长,如果你需要计算正方形面积,可以给Square重写这个方法:
class Square extends Shape { constructor(_sideLength) { super('square', 4, _sideLength); } // 重写calcArea计算正方形面积 calcArea() { console.log(this.sideLength ** 2); } }
此时调用newSquare.calcArea()会输出25,符合正方形面积的计算逻辑。
内容的提问来源于stack exchange,提问作者Alber_Quintana
相关产品推荐
相关产品推荐

