Выбор ответа Junior Классы и интерфейсы обновлено
Метод без объекта
Вопрос
Что произойдёт?
class Counter {
count = 0;
inc() { this.count++; }
}
const c = new Counter();
const f = c.inc;
f();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Компилируется, в рантайме TypeError: this равен undefined. Методы не привязаны к объекту.
Варианты ответа
- Компилируется, а в рантайме увеличится
globalThis.count - Компилируется, а
c.countстанет 1, как при вызовеc.inc() - Ошибка компиляции: метод нельзя присвоить в переменную
- Компилируется, в рантайме TypeError:
thisравенundefinedправильный ответ
Разбор
Методы не привязаны к объекту. При вызове f() без объекта слева от точки this внутри равен undefined: тело класса всегда выполняется в строгом режиме. Чтение this.count падает с TypeError. TypeScript по умолчанию это не ловит.
globalThis был бы только в нестрогом режиме, а в классах его не бывает. Лечится стрелочным полем inc = () => { this.count++ }, bind или явным параметром this: Counter в сигнатуре метода.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.