Выбор ответа Middle Прототипы и классы обновлено
Статический метод и наследник
Вопрос
Что выведет код?
class Model {
static create() { return new this(); }
}
class User extends Model {}
const u = User.create();
console.log(u instanceof User, u instanceof Model);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: true true. extends связывает не только прототипы экземпляров, но и сами классы: прототипом User становится Model.
Варианты ответа
false truetrue falsetrue trueправильный ответ- TypeError:
User.createis not a function
Разбор
extends связывает не только прототипы экземпляров, но и сами классы: прототипом User становится Model. Поэтому статический create наследуется. Внутри статического метода this это класс, на котором его вызвали, то есть User, и new this() создаёт User. Экземпляр User одновременно instanceof Model, потому что Model.prototype есть в его цепочке. false true получилось бы с new Model() вместо new this().
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.