【问题标题】:Javascript Inheritance (super)Javascript继承(超级)
【发布时间】:2021-01-29 17:50:21
【问题描述】:

我正在浏览 JS 继承文档,我被欢迎进入了一个新的“功能”(对我来说),称为 super,关键字 super。好吧,据我所知,如果我有一个名为 hospitalStaff 的父类,其参数为名称和员工编号,而继承的类名为 nurse 并且上面还有参数名称,还有其他参数。所以,在这个例子中,我只会使用super(name);,不是吗?

感谢您的帮助!!祝您有美好的一天,愉快的编码!

【问题讨论】:

  • super 用于调用父类的构造函数
  • 好吧,如果父类需要的话,你需要姓名和员工编号(以你自己的例子)

标签: javascript inheritance frontend super


【解决方案1】:

是的,您可以将参数传递给super 函数。通过在Nurse 构造函数中调用super,您可以调用HospitalStaff 中的构造函数并与它们一起传递参数。

在下面的示例中,Nurse 类也有 sayName 方法。所有方法(包括构造函数)都继承自父类。

但是如果您的Nurse 构造函数与HospitalStaff 的构造函数不同,那么您需要创建一个新的构造函数,该构造函数也使用super 调用父构造函数。如果不调用super,您只会覆盖子构造函数。试试看,它仍然可以工作。但是您不会拥有 namestaffNumber 属性。

同样适用于可以使用super 从父级调用方法的方法。这样,您可以覆盖子级的方法,但仍保留父级对该方法的实现。

class HospitalStaff {
  constructor(name, staffNumber) {
    this.name = name;
    this.staffNumber = staffNumber;
  }
  sayName() {
    console.log(`Name: ${this.name}`);
    console.log(`Number: ${this.staffNumber}`);
  }
}

class Nurse extends HospitalStaff {
  constructor(name, staffNumber, field) {
    super(name, staffNumber); // Sets name and staffNumber properties
    this.field = field; // Adds a field property
  }
  sayName() {
    super.sayName();
    console.log(`Field: ${this.field}`);
  }
}

const bob = new HospitalStaff('bob', 43);
bob.sayName();

const julie = new Nurse('Julie', 120, 'pediatrics');
julie.sayName();

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2014-09-02
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多