Выбор ответа Middle Прототипы и классы обновлено

Обращение к приватному полю снаружи

Вопрос

Что произойдёт при запуске файла?

class Wallet {
  #balance = 100;
}
console.log('старт');
const w = new Wallet();
console.log(w.#balance);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: SyntaxError при разборе, старт не выведется. Обращение к balance вне тела класса это ранняя синтаксическая ошибка: движок проверяет приватные имена при разборе, и файл не начнёт выполняться.

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

  1. Выведет старт, затем значение 100
  2. Выведет старт, затем undefined без ошибки
  3. Выведет старт, затем упадёт с TypeError
  4. SyntaxError при разборе, старт не выведетсяправильный ответ

Разбор

Обращение к #balance вне тела класса это ранняя синтаксическая ошибка: движок проверяет приватные имена при разборе, и файл не начнёт выполняться. Это отличает #-поля от соглашения _balance, которое ничего не защищает. undefined вышло бы для обычного несуществующего свойства. TypeError бывает в другом случае: метод класса читает obj.#balance у объекта, у которого такого поля нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.