【问题标题】:Callback while subclass constructor completed子类构造函数完成时的回调
【发布时间】:2021-11-20 16:26:27
【问题描述】:

我想知道一旦子类完成其构造函数后,是否有一种机制或内置函数可以让超类做某事?

或者我需要自己构建它?

类似:

Class Parent {
  constructor(){
    console.log(1);
  }

  constructorComplete(){
    console.log(5);
  }
}


Class Child extends Parent {
  constructor(){
    super()
    console.log(2);
  }

  constructorComplete(){
    console.log(4);
    // super.constructorComplete();
  }
}


Class Grandchild extends Child {
  constructor(){
    super()
    console.log(3);
    // super.constructorComplete();
  }
}

谢谢。

【问题讨论】:

  • 超类应该对它的后代一无所知。听起来你有一个泄漏的抽象......
  • 这感觉就像XY Problem - 你能描述你为什么要这样做吗,可能有更合适的模式可以使用。
  • 构造函数不应该“”某事,它应该只初始化实例而不是其他任何东西。
  • 谢谢大家,我想将每个实例添加到列表中。所以我在超类的构造函数中添加了list.push(this)。但是我希望实例在添加到列表之前已经很好地初始化,并且有多个子类。我不想把list.push(this) 放在那些子类中。无论如何,如果构造函数不应该“做”某事,我应该只使用list.push(new SubClass()) 吗?
  • @SamuelWong 是的,在实例化之外执行list.push() 非常非常干净。它也不将类限制为单个全局列表。

标签: javascript class inheritance constructor


【解决方案1】:

构造函数不应该“做”某事,它应该只初始化实例而不是其他任何东西。

请参阅下面的评论/讨论。

【讨论】:

  • Bergi 评论的 1:1 副本获得了反对票。除此之外,也没有任何贡献可以证明答案是一种自己的创造性行为。 @SamuelWong 请考虑删除这个无用的答案。
猜你喜欢
  • 2011-09-08
  • 2015-12-03
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2011-12-07
  • 2014-02-19
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多