Что выведет код 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 ошибок.