Вопрос №55817 от пользователя Kostya Pershin в уроке «Конструктор», курс «JS: Введение в ООП»

Kostya Pershin

Добрый день, вроде бы все работает как надо(проверяю локально), но тесты выдают ошибку. Причем ошибка мне не понятно. Функция возвращает Object, а тест ждет Point. https://ru.hexlet.io/code_reviews/421985

7 2

Maksym

такая же проблема! ломаю головую.... как Segment тест проходит а как Point, то возвращается Obj. Причем если в самой функции закинуть решение в переменную и оттуда извлекать Point, то оно извлекается, а если возвращать функцией этот результат (т.е. returnОМ) то уже не работает... При чем конструктором являются только 2 обьекта, в solution уже просто функция... Вобщем решения нет....

1

Kostya Pershin

Maksym, решил. Если интересно, то Point и Segment используются как конструкторы, поэтому создаем как в теории, а Reverse возвращает НОВЫЙ Segment на основании НОВЫХ точек, равных тем, что мы передаем в функцию reverse при вызове ( reverse(сегмент, на основании которого создаются новые точки, равные этим))

0

Kostya Pershin

Но интересно, а не удобнее ли использовать вместо геттеров в сегменте обычных объект? То есть получение точки будет иметь вид segment.getBeginPoint.x , а не segment.getBeginPoint().x? Или есть какая-то разница в функицональности?

0

Maksim Litvinov

Костя, добрый день! Отлично, что вы решили эту задачу. Обращение к данным напрямую, минуя геттеры, нарушает границы абстракции. Вспомните уроки из курса Абстракция с помощью данных. Внешний код не должен знать, как устроена внутри Точка или Отрезок. Они только используют их интерфейс (конструктор и геттеры). Представьте, что внутреннее устройство точки поменяется. Если код, использующий точку, работает с ней напрямую, минуя геттеры, придется поменять весь код. А его может быть очень много. В другом случае, придется поменять только геттеры, а это всего две функции.

0

Kostya Pershin

Максим Литвинов, то есть каждый конструктор должен возвращать определенное значение незнависимо от того, как будут меняться передаваемые аргументы? Думаю, пойму все до конца дальше, в ходе выполнения следующих заданий

0

Maksym

Kostya Pershin, да, тоже решил вчера гдето через час после комента. Чуть изменив файл Point, а то астракцию не так реализовал для разбора точки) в целом интересно. Но не понял что такая мелочь а так влияет.

0

Maksim Litvinov

Сам по себе конструктор ничего не возвращает, он наполняет данными объект:

Самое интересное в этом примере – оператор new (как и многое в js, он работает не так как new в других языках). Фактически он создает объект, устанавливает его как контекст во время вызова конструктора (в данном случае Company) и возвращает созданный объект. Именно поэтому сам конструктор ничего не возвращает (хотя может, но это другой разговор), а внутри константы company оказывается нужный нам объект.

0

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

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

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

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

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

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

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