ES6 - Где лучше инициализировать член - родительский класс или производный класс? - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь выяснить, существует ли лучшая практика инициализации членов класса производных классов в ES6 - в дочернем или родительском элементе и почему?

Например:

Опция 1:

class AbstractAnimal {
   constructor() {
       this.voice = null;
   }

   makeVoice() {
      this.voice.make(); 
   }
}

class Dog extends AbstractAnimal {
   constructor() {
       super();
       this.voice = new Bark();
   }

   onSeeFriend() {
       this.makeVoice();
   }
}

Опция 2:

class AbstractAnimal {
   constructor(voice) {
       this.voice = voice;
   }

   makeVoice() {
      this.voice.make(); 
   }
}

class Dog extends AbstractAnimal {
   constructor() {
       super(new Bark());
   }

   onSeeFriend() {
       this.makeVoice();
   }
}

Очевидно, что в обоих методах есть свои плюсы и минусы.Первый вариант распространяет инициализацию членов вокруг, что усложняет его отслеживание.В то время как второй вариант будет раздувать все до одного места, но в итоге вы могли бы получить огромных конструкторов, принимающих множество аргументов.

Был бы признателен, если бы я услышал ваши мысли по этому поводу.Спасибо!

1 Ответ

0 голосов
/ 16 марта 2019

Поскольку этот вопрос является опросом общественного мнения, я просто хотел бы отметить, что существует третий путь , как всегда в JS: Mixins

Pro s: позволяет абстрагироваться от инициализации до третьего class;AbstractAnimal является действительно абстрактным
Con s: может быть трудно оправдать для простых случаев, таких как лай Dog

class AbstractAnimal {
  makeVoice() { this.voice.make(); }
}
const Barking = Base => class extends Base {
  constructor() {
    super();
    this.voice = new Bark();
  }
}
class Dog extends Barking(AbstractAnimal) {
  onSeeFriend() { this.makeVoice(); }
}


class Bark { make() { console.log('Woof'); } }
new Dog().onSeeFriend();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...