Javascript.Когда мне нужно использовать конструктор в объявлении дочерних классов? - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы знать, правильно ли я это делаю ...

Имея этот код:

class Room {
 constructor(type, size, hasWindows, equipment) {
    this.type       = type;
    this.size       = size;
    this.hasWindows = hasWindows;
    this.equipment  = ['esterillas', ...equipment];
 };
};  

class PilatesRoom extends Room {

};

const room1 = new PilatesRoom('pilates', 20, true, ['balón medicinal'])
console.log(room1);
//returns: PilatesRoom {type: "pilates", size: 20, hasWindows: true, equipment: Array(2)}

Я имею в виду ... Мне на самом деле не нужно использовать«конструктор» и «супер», чтобы все работало идеально, но когда я проверяю это в интернете, все его используют.Нужно ли мне?Например:

class PilatesRoom extends Room {
 constructor(type, size, hasWindows, equipment) {
  super(type, size, hasWindows, equipment)
 };
};

Это возвращает то же самое.

Я пытаюсь понять!Спасибо, ребята, что уделили время.

Ответы [ 4 ]

0 голосов
/ 06 декабря 2018

Насколько я знаю, конструктор класса - это просто синтаксический сахар в javascript, поэтому вам не нужно его использовать.

Также, как объясняет MDN:

"Метод конструктора - этоспециальный метод для создания и инициализации объекта, созданного с помощью класса. В классе может быть только один специальный метод с именем «конструктор» в классе. SyntaxError будет выброшено, если класс содержит более одного вхожденияметод конструктора.

Конструктор может использовать ключевое слово super для вызова конструктора суперкласса. "

, как упоминалось, он может быть там или нет.

MDN для дальнейшего понимания

0 голосов
/ 06 декабря 2018

Вам не нужно добавлять конструктор дочернего класса, если он не добавляет никакой логики.(Фактически инструменты статического анализа и качества кода иногда помечают его как «бесполезный конструктор» и выдают предупреждение.)

Некоторые программисты предпочитают явное определение конструктора, некоторые могут перенести привычки из других языков, которыеэто может потребоваться и т. д. Но если дочерний конструктор на самом деле не делает что-то для дочернего класса, кроме простой передачи тех же значений родительскому конструктору, в этом нет необходимости.

0 голосов
/ 06 декабря 2018

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

Вам необходимо поддерживать каждую строку кода.Если нет линии, нет обслуживания.

0 голосов
/ 06 декабря 2018

Вы должны использовать выражение super(), если хотите использовать конструктор вашего дочернего класса.В противном случае вам не нужно.Так просто.

class PilatesRoom extends Room {
 // the constructor should be removed (there is no point to keep it):
 constructor(type, size, hasWindows, equipment) { 
  super(type, size, hasWindows, equipment)
 };
};

В приведенном выше коде нет причин определять конструктор.Однако в приведенном ниже коде вам нужно позвонить foo() и, следовательно, вы также должны использовать super():

class PilatesRoom extends Room {
 constructor(type, size, hasWindows, equipment) {
  super(type, size, hasWindows, equipment)
  foo()
 };
};

Более подробная информация здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super#Description

...