Выбор ответа Junior Прототипы и классы обновлено
this до вызова super
Вопрос
Что произойдёт при new Admin('Аня')?
class User {
constructor(name) { this.name = name; }
}
class Admin extends User {
constructor(name) {
this.role = 'admin';
super(name);
}
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ReferenceError: к this нельзя обращаться до super(). В конструкторе наследника объект this создаёт родительский конструктор, поэтому до super() его ещё нет.
Варианты ответа
- Создастся объект с полями
nameиrole, как обычно - ReferenceError: к
thisнельзя обращаться доsuper()правильный ответ - SyntaxError ещё при разборе класса, до создания объекта
- Создастся объект только с
role, аnameбудетundefined
Разбор
В конструкторе наследника объект this создаёт родительский конструктор, поэтому до super() его ещё нет. Обращение к нему бросает ReferenceError во время выполнения. Синтаксически код корректен, парсер пропустит его. Объект не создастся вовсе, ни с одним полем. Правильно: сначала super(name), потом this.role = 'admin'.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.