You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:42:24