Выбор ответа 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.

Варианты ответа

  1. false true
  2. true false
  3. true trueправильный ответ
  4. TypeError: User.create is 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 ошибок.