为什么在使用默认构造函数扩展类时,我会在 JavaScript 中遇到编译错误?

问题描述 投票:0回答:1

我尝试在 JavaScript 中创建子类,但遇到与在子类构造函数中使用 this 相关的错误。这是我正在使用的代码:

class Mammals {
  // No constructor defined explicitly
}

class Humans extends Mammals {
  constructor(name) {
    this.name = name;
  }
}

const jimmy = new Humans("Jimmy");
console.log(jimmy.name);

我理解,如果基类有一个默认的无参构造函数,JavaScript 应该允许子类构造函数在不显式调用 super() 的情况下运行。我认为由于 Mammals 有一个默认构造函数(因为它没有明确定义),因此 Humans 构造函数不需要调用 super()。

但是,我仍然遇到错误消息:

在访问“this”之前必须调用派生类中的超级构造函数 或从派生构造函数返回

谁能解释一下为什么

谢谢您的帮助!

javascript class super
1个回答
0
投票

您从哪里得到这样的想法:如果基类没有构造函数,JavaScript 应该允许子类构造函数在不显式调用 super() 的情况下运行?

JavaScript 需要先调用 super(),然后才能访问

this
,所以假设如果您从不访问
this
,那么是的,您不需要调用
super
,但否则就需要调用。

© www.soinside.com 2019 - 2024. All rights reserved.