【问题标题】:Does a javascript subclass need to have the same arguments as its parent?javascript 子类是否需要与其父类具有相同的参数?
【发布时间】:2017-07-14 09:59:41
【问题描述】:

这是我的父类:

class Parent {
  constructor(id, label, header="") {
    this.id = id;
    this.label = label;
    this.header = header;
  }
}

如果您愿意,可以手动设置标题,默认为""

但是,对于某些子类,我想禁止在实例化时设置标头。这行得通吗:

class Child extends Parent {
  constructor(id, label) {
    super(id, label);
    this.header = "Default Header";
  }
}

也就是说,子类的构造函数可以省略其父类的一些参数吗?

【问题讨论】:

  • 您忽略了父类中的 header 变量。这是一个错字还是故意的? (即你没有做this.header = header 而是忽略它)
  • @svenskkunganka 错字,干杯
  • 你为什么不试试呢?
  • 这听起来更像implementsextend 没有这样的东西。随着父类变得更加具体,子类通常会掩盖更通用的父类的一些参数。
  • 您的问题是“可以”和“需要”。如果您的意思是“应该”(在最佳实践的意义上),那就这么说吧。顺便说一句,类没有参数。他们的构造函数。

标签: javascript class oop ecmascript-6 subclass


【解决方案1】:

没必要。这就是类扩展的工作原理。您正在将 parent 属性传递给 child 类。至于constructor,你想放什么就看你了。

【讨论】:

  • class Child extends Parent - 子类获取父属性,而不是其他方式,对吧?
【解决方案2】:

是的,你可以做到。

您还可以在子构造函数中调用父构造函数(带有 3 个参数):

class Child extends Parent {
  constructor(id, label) {
    super(id, label, "Default header");
  }
}

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 2021-02-28
    • 2020-07-18
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多