Вопрос №66929 от пользователя Oo11o в уроке «Конфигурация», курс «JS: Объектно-ориентированный дизайн»

Oo11o

Раннее, мы создавали Класс, и с помощью конструктора могли создавать неких данные на некую абстракцию. С этими данными мы могли работать через this.data.

В данной теории, мы изучили Класс, в котором данные передаются через метод . Возникает вопрос, как другие методы теперь должны работать с этими данными:

  1. Передать аргумент в this.data и уже работать с этой переменной: ``` class Test { someMethod2(){ console.log(this.data) ; } method(data){ this.data = data; this.someMethod2(); } }

const solution = new Test(); solution.method('data');

2.  Передавать аргумент дальше другим функциям, как аргумент

class Test { someMethod2(data){ console.log(data) ; } method(data){ this.data = data; this.someMethod2(data); } }

const solution = new Test(); solution.method('data');

3. Или если возникает такой вопрос, значит уже что-то не правильно построено

3 0

Maksim Litvinov

Добрый день! Я правильно понял, что сейчас речь идет об этом объекте Markdown?

const md = new Markdown();
const html = md.render(markdown);
0

Oo11o

Maksim Litvinov.

Скорее вопрос в организации кода. Пусть будет данный код (главное что мы передаем через метод переменную):

const md = new Markdown();
const html = md.render(markdown);

Представим, что в классе Markdown был бы метод validate(), каким образом, он должен работать с переменной *markdown *, которая поступила через render()?

  1. Cоздать "this.markdown" = markdown и работать с этой переменной как this.markdown в validate.
  2. Или сразу вызывать метод this.validate(markdown).

Какой путь лучше использовать ?

0

Maksim Litvinov

Здесь как раз суть в том, что метод render() должен быть чистым и не не менять состояние объекта:

В этом коде класс Markdown — тип, относящийся к транслятору, а не к тексту. У такого объекта жизненный цикл шире, чем ожидание однократного вызова функции render() (как в предыдущем случае). Он может (и должен) переиспользоваться столько раз, сколько потребуется. Для этого важно оставить функцию render() чистой и не менять состояние объекта между вызовами.

А вызов this.markdown = markdown как раз изменит состояние объекта. Если для работы метода render() нужно провалидировать текст, можно создать для этого вспомогательный метод validate() и передавать ему текст через аргумент this.validate(markdown)

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

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

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

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

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

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