Преимущества использования объекта в качестве атрибута вместо наследования от его класса - PullRequest
0 голосов
/ 18 июня 2019

Я занимаюсь разработкой программного обеспечения с открытым исходным кодом на JavaScript и создал несколько классов, которые реализуют различные функциональные возможности.
Хотя в настоящее время я не планирую наследовать от этих классов, я думаю помешать другим разработчикам в будущем сделать это, выдав ошибку (или, по крайней мере, предупреждение), если они это сделают.
Я прочитал (и также понял), что это может стать довольно неприятным, если кто-то расширит мой класс, и я затем изменю его функциональность, что приведет к разрушению подклассов, и что было бы лучше использовать композицию объектов вместо наследования.
У меня вопрос: с чего бы лучше иметь что-то подобное (композиция, как я понимаю):

class foo{
  constructor(){}

  doSomething(){
    console.log('something');
  }
}

class bar{
  constructor(){
    this.myFoo = new Foo();
  }

  doSomethingElse(){
    myFoo.doSomething();
    console.log('else');
  }
}

чем то вроде этого (наследство):

class foo{
  constructor(){}

  doSomething(){
    console.log('something');
  }
}

class bar extends foo{
  constructor(){}

  doSomethingElse(){
    super.doSomething();
    console.log('else');
  }
}

Я думаю, что изменение doSomething () сломало бы подкласс в любом случае. Я что-то упустил, или thumbrule предпочитает композицию, а не наследование просто не применимо к моему делу?

...