Вопрос №55255 от пользователя Вячеслав Кузнецов в уроке «Упаковка и Распаковка (Boxing)», курс «JS: Введение в ООП»

Вячеслав Кузнецов

Добрый день

Вопрос по этой части теории

const words = ['Hello'];
const helloBuilder = (string) => words.push(string);
const build = () => words.join(' ');

helloBuilder.valueOf = () => build();

helloBuilder('from');
helloBuilder('valueOf');

console.log(helloBuilder == 'Hello from valueOf'); // true

Я правильно понимаю последовательность действий здесь, при вызове hellobuilder('string'):

  1. Сначала выполняется сама функция hellobuilder, и в массив words добавляется строка
  2. Так как мы записали конкретное значение функции hellobuilder, исполняется этот шаг и к массиву words применяется метод join.

А если мы не переопределяем значение (helloBuilder.valueOf = () => build();), то valueOf будет просто функция?

Тяжеловато этот пункт теории дался, смог понять только после выполнения упражнения.

Спасибо

2 0

Максим Литвинов

Добрый день, Вячеслав! Да, сначала вызывается функция helloBuilder(), и в массив добавляются слова. Затем мы переопределили метод valueOf этой функции, теперь вызов этого метода будет возвращать результат вызова функции build() (а результат её вызова - это скленная из элементов массива строка). Теперь, когда функция helloBuilder сравнивается с чем-то helloBuilder == 'Hello from valueOf', автоматически вызывается её переопределенный метод и возвращается строка. Если метод не переопределить, вызовется тот, который наследуется:

const f = () => {};
console.log(f.valueOf()); // [Function: f]
0

Вячеслав Кузнецов

Максим, спасибо!

0

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

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

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

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

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

Иконка программы Фронтенд-разработчик
Профессия

Фронтенд-разработчик

Разработка фронтенд-компонентов веб-приложений
23 июня 8 месяцев
Иконка программы Python-разработчик
Профессия

Python-разработчик

Разработка веб-приложений на Django
23 июня 8 месяцев
Иконка программы PHP-разработчик
Профессия

PHP-разработчик

Разработка веб-приложений на Laravel
23 июня 8 месяцев
Иконка программы Node.js-разработчик
Профессия

Node.js-разработчик

Разработка бэкенд-компонентов веб-приложений
в любое время 8 месяцев
Иконка программы Верстальщик
Профессия

Верстальщик

Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия

Java-разработчик

Разработка приложений на языке Java
23 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
NEW

Разработчик на Ruby on Rails

Создает веб-приложения со скоростью света
22 июня 5 месяцев

Похожие вопросы

Андрей Шляпников 4 дня назад →

Добрый день! Подскажите хотя бы правильно двигаюсь ревью (https://ru.hexlet.io/code_reviews/416227) тесты п...

Мария Некрасова 15 мая 2021 →

Добрый день! Подскажите пожалуйста, в каком направлении двигаться, совсем запуталась ревью: https://ru.hexl...

Иван Лисин 06 мая 2021 →

Приветствую! Проходят все тесты кроме последнего. В целом понимаю в чем проблема, но не понимаю как её реши...

Artem Kurin 01 мая 2021 →

Доброго времени суток. У меня три вопроса. Первый: как максимально точно можно интерпретировать шестую стро...

Roman Ermakov 25 апреля 2021 →

https://ru.hexlet.io/codereviews/400279?submissionid=509673 Добрый день! Вот и я добрался до этого лютого з...