Войти Регистрация
Фронтенд

81. Баланс в виджете МТС: bind дважды, call и стрелочное поле класса

Средняя

Что выведет код? Запишите строки по порядку, по одной на строку. Код выполняется в строгом режиме.

В работе: Виджет баланса в личном кабинете: метод передали колбэком, и вместо 350 ₽ показалось «нет this».

Как проверяем Код не запускаем — предскажите вывод. Пишите строки по порядку, по одной на строку; пробелы по краям не важны. Ответ один на подход: после него показываем разбор.
thisbindcallклассыстрелочные функции

Источник: МТС, квиз про bind/call и this в классах, репозиторий кандидата, 2024. Условие пересказано своими словами.

  1. 'use strict';
  2. function balance() {
  3. return this ? this.rub : 'нет this';
  4. }
  5. const home = { rub: 350 };
  6. const work = { rub: 1200 };
  7. const kid = { rub: 90 };
  8. console.log(balance.bind(home).bind(work).call(kid));
  9. console.log(balance.call(kid));
  10. class Widget {
  11. rub = 500;
  12. method() { return this ? this.rub : 'нет this'; }
  13. arrow = () => this.rub;
  14. }
  15. const w = new Widget();
  16. const { method, arrow } = w;
  17. console.log(method(), arrow());
  18. console.log(method.call(home), arrow.call(home));
  19. function Account() { this.rub = 1; }
  20. const made = new (Account.bind(work))();
  21. console.log(made.rub, work.rub, made instanceof Account);
  22. console.log(balance.bind(home).name);