Контекст вызова функции. Фундаментальный JavaScript

Поделиться
HTML-код
  • Опубликовано: 28 июн 2021
  • Работа с ключевым словом this в JavaScript поначалу может доставить немало хлопот. This указывает на контекст. Но откуда он берётся? Пробуем разобраться, отконсолив с десяток разных вариантов этого this.
    MDN developer.mozilla.org/ru/docs...
    #js
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

Комментарии • 37

  • @demimurych1
    @demimurych1 2 года назад +38

    0:04:35 *this указывает на глобальный обьект, по всей видимости потому что он находится внутри setTimeout*
    this это идентификатор, который устанавливается в момент вызова функции.
    Кроме bind существует две штатные ситуации установки this - при вызове функции выражением dot expression
    например myObj.method(). В этом случае в момент вызова функции this будет установлен в base для dot expression.
    То есть внутри method this будет указывать на myObj
    Второй способ использование width statement. Который запрещен в strict mode. Иными словами про него можно забыть.
    Во всех прочих случаях this *всегда будет указывать на globalObject*
    Основная проблема изучающих JS в том, что они пытаются к языку у которого есть свое собственное поведение
    притянуть за уши привычные концепции класс ориентированных ООП языков. Таких как Java например, где this
    это контекст. В *JS this это НЕ КОНТЕКСТ* В JS this это обычный идентификатор, который устанавливается строго в
    момент вызова функции и равен глобальному обьекту. Исключение dot expression: obj.method
    0:09:43 *this и addEventListener или любое другое стороннее API*
    В случае использования не JS API, this может быть установлен как угодно.
    А точнее так, как это задумал разработчик API. То есть в случае eventListener this указывает на обьект кнопки
    не потому что метод вызывается в каком то там контексте. А потому что DOM API в своей спецификации написал,
    что при подобном вызове this всегда будет указывать на обьект инициатор.

    • @Goddamn_Right
      @Goddamn_Right 7 месяцев назад +2

      Ого, не ожидал вас здесь встретить!) Вам бы с Михаилом объединиться и сократить многосерийные пятичасовые видео до частей по 15 - 30 минут. Это были бы самые лучшие уроки на youtube)

    • @user-gi8pn8or7l
      @user-gi8pn8or7l 4 месяца назад

      спасибо Деми Мурычу за правки) Проверьте еще пожалуйста такого человека как ayub begimqulov, у него много интересных уроков есть.

  • @user-lx5vv3uu8u
    @user-lx5vv3uu8u 3 года назад +2

    Михаил, благодарю! Я сейчас как раз смотрю Ваши лекции! )))

  • @yuriilukianovych8660
    @yuriilukianovych8660 3 года назад

    Отлично, вовремя!
    Как раз через 2 дня изучаю этот вопрос на онлайн-курсах.
    Смотрел несколько твоих роликов - очень классно разьясняешь.
    Этот видос ОБЯЗАТЕЛЬНО посмотрю

  • @user-lx5vv3uu8u
    @user-lx5vv3uu8u 3 года назад +1

    Очень шикарное объяснение!

  • @Nikitosss91
    @Nikitosss91 3 года назад +2

    Обалденно, спасибо

  • @user-vm2db5cq1g
    @user-vm2db5cq1g Год назад

    Михаил как всегда супер! Отличный контент на вашем канале! Спасибо, продолжайте в том же духе)

  • @user-mg7tt3fb8m
    @user-mg7tt3fb8m Год назад

    Большое спасибо за пример с 'const that = this'! Увидел в другом видео такую запись рядом с requestAnimationFrame(). Чуть голову не сломал пока разобрался что к чему. Ваше видео помогло понять как моя ситуация срабатывала.

  • @nouchance
    @nouchance 3 года назад +2

    Спасибо большое

  • @vladosononame6376
    @vladosononame6376 3 года назад +4

    Непомнящий помогает вспомнить

  • @vladvoloshenko5701
    @vladvoloshenko5701 2 года назад

    спасибо, годно)

  • @kirillguryanov4925
    @kirillguryanov4925 Год назад +1

    Thanks

  • @user-rx7il6er8w
    @user-rx7il6er8w 3 года назад +1

    Годнота подъехала, спасибо за труды)
    Про redux не собираешься делать уроки или может курс на юдеми дополнить им?)

    • @mishanep
      @mishanep  3 года назад

      Я иногда думаю в эту сторону. За 30 минут полноценно не расскажешь, кликер можно конечно собрать)) Возможно к концу года выпущу второй курс по Реакту - с дополнительными интсрументами.

  • @DmitriyDev
    @DmitriyDev 3 года назад +1

    наконец JS вернулся)

  • @user-cu2ng7gf4k
    @user-cu2ng7gf4k Год назад

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

  • @vadimniziev5489
    @vadimniziev5489 3 года назад

    Михаил, спасибо! Подскажите пожалуйста, не планируете сделать видео по продвинутой работе с формами, и валидацией ? Типа yup-а, useForm, Formik и т.д.))

    • @mishanep
      @mishanep  3 года назад

      Приветствую!
      В ближайших планах нет. Возможно когда-нибудь доберусь и до этого.

  • @elenakorchukova7760
    @elenakorchukova7760 3 года назад

    Михаил, спасибо 😉 Кажется, я знаю Вашу музу 😅

  • @TimOFFon
    @TimOFFon Год назад +3

    0:14:04 разве привязка bind позволяет переопределять контекст повторно, вроде же только один раз?

    • @Goddamn_Right
      @Goddamn_Right 7 месяцев назад

      Не позволяет. Например это уже не сработает, как в предыдущий раз: person3.hi = person2.hi.bind(person3); Вывод будет Hi, I'm Person 2, а не Hi, I'm Person 3

  • @chups09
    @chups09 7 месяцев назад

    rson2.hi = person.hi без bind тоже работает нормально)

  • @from_brest2631
    @from_brest2631 2 года назад

    лойс

  • @RamaRama-qv3jo
    @RamaRama-qv3jo Год назад

    Жаль, что в вашем платном курсе нет подробного разбора этой темы JS.

  • @sergey_zatsepin
    @sergey_zatsepin 3 года назад +2

    17:28 тут bind необязателен.

    • @Goddamn_Right
      @Goddamn_Right 7 месяцев назад

      С bind создается новая независимая от person.hi функция, а при простом присваивании person2.hi = person.hi присваивается лишь ссылка на person.hi если речь об этом

  • @chappik4484
    @chappik4484 10 месяцев назад

    Я правильно понимаю, что this это ссылка не некий объект, в контексте которого выполняется функция. Также с помощью this мы можем получить доступ к свойствам этого объекта.

    • @mishanep
      @mishanep  10 месяцев назад

      Да, всё верно.

  • @danilx6239
    @danilx6239 Год назад +3

    Как и в других видео - не объясняется, зачем нужен This. Впрочем, даже статья на MDN не даёт чёткого ответа.

  • @user-hp1ow7cu7o
    @user-hp1ow7cu7o 9 месяцев назад

    Как ты это вспомнил?