Выбор ответа Middle Прототипы и классы обновлено
Обращение к приватному полю снаружи
Вопрос
Что произойдёт при запуске файла?
class Wallet {
#balance = 100;
}
console.log('старт');
const w = new Wallet();
console.log(w.#balance);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: SyntaxError при разборе, старт не выведется. Обращение к balance вне тела класса это ранняя синтаксическая ошибка: движок проверяет приватные имена при разборе, и файл не начнёт выполняться.
Варианты ответа
- Выведет
старт, затем значение100 - Выведет
старт, затемundefinedбез ошибки - Выведет
старт, затем упадёт с TypeError - SyntaxError при разборе,
стартне выведетсяправильный ответ
Разбор
Обращение к #balance вне тела класса это ранняя синтаксическая ошибка: движок проверяет приватные имена при разборе, и файл не начнёт выполняться. Это отличает #-поля от соглашения _balance, которое ничего не защищает. undefined вышло бы для обычного несуществующего свойства. TypeError бывает в другом случае: метод класса читает obj.#balance у объекта, у которого такого поля нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.