Выбор ответа Middle this, call, apply, bind обновлено
Поле-стрелка против метода класса
Вопрос
Какое утверждение о handle в каждом варианте верно?
class A { handle() { return this; } }
class B { handle = () => this; }
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: У B своя handle в каждом экземпляре и не теряет this, у A одна в прототипе. Поле класса создаётся в конструкторе на каждом экземпляре, а стрелка берёт this из конструктора, то есть экземпляр.
Варианты ответа
- Оба
handleлежат в прототипе и общие для всех экземпляров своего класса - У
Bсвояhandleв каждом экземпляре и не теряетthis, уAодна в прототипеправильный ответ A.prototype.handleиB.prototype.handleодинаково не теряютthisпри отрыве- Поле-стрелку нельзя переопределить в наследнике, поэтому
Bнельзя наследовать
Разбор
Поле класса создаётся в конструкторе на каждом экземпляре, а стрелка берёт this из конструктора, то есть экземпляр. Поэтому const h = b.handle; h() вернёт экземпляр. Метод A.handle лежит в прототипе один на всех и при отрыве теряет this. У B в прототипе handle нет вовсе. Наследовать B можно, но поле наследника перезапишет поле родителя, и super.handle() из наследника вызвать не получится: в прототипе родителя такого метода нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.