Вопрос №55543 от пользователя Вадим Белинович в уроке «Паттерн Состояние (State)», курс «JS: Полиморфизм»

Вадим Белинович

this.screen.state = new this.screen.states.ScreenOn(this.screen);

Подскажите по теории плиз - не понимаю как мы в классе вызываем другой класс и передаем в него изначальный класс, а там еще раз что-то куда-то передаем. Как такая схема с классами работает? Я сейчас убрал конструктор из PowerOffState и вообще поведение не поменялось.

1 0

Theodor Golovnin

Привет, Вадим! То, что слева от знака равно. new - оператор, вызывающий конструктор, создающий новый инстанс класса.

this - ссылка на конкретный инстанс класса(объект)

  • screen - то, что мы передали при вызове конструктора ранее. Объект с состояниями. Это как бы абстракция "Экран"
  • states - ну в общем вот и состояния. Это объект, содержащий все конструкторы

  • ScreenOn - вот мы и доползли до конкретного конструктора, являющегося абстракцией состояния.
  • this.screen) - передаём туда опять самый главный объект "Экран". Он нам понадобится внутри, чтобы опять проделать такую штуку

this.screen.state = записываем в state значение конкретного инстанса класса, абстракции "состояния"

Я так понял, мы вызываем одни и те же методы - powerOn, touch, swipe на screen - но получаем разное поведение, исходя из конкретного состояния. У программистов это называется "упростили", похоже)))

Про PowerOffState ну так и в классе нет методов, оперирующих c this.

1

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
20 октября 8 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
20 октября 8 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
20 октября 8 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
20 октября 8 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
20 октября 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Новый
Создает веб-приложения со скоростью света
20 октября 5 месяцев