Что выведет код Senior Прототипы и классы обновлено

Порядок в конструкторе

Вопрос

Что выведет код? По строке на каждый вывод.

class A {
  constructor() { console.log('A'); this.init(); }
  init() { console.log('init A'); }
}
class B extends A {
  constructor() { super(); console.log('B'); }
  init() { console.log('init B'); }
}
new B();

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: A, init B, B. Почему так Вызов метода из конструктора базового класса попадёт в переопределённую версию - а поля наследника ещё не проинициализированы.

Что выведет

A
init B
B

Разбор

Почему так

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

Вывод

A
init B
B

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.