Тёмный

Как работает this в javascript. Разберемся на примерах опираясь на официальную спецификацию. [RU] 

As For JS ...
Подписаться 25 тыс.
Просмотров 21 тыс.
50% 1

this в JavaScript - это не контекст, никогда им не был и никогда не будет. this - это типичное JavaScript выражение, поведение которого очень схоже с поведением обычного идентификатора.
Попробуем на примерах разобраться: с каким значением связан this в тех или иных условиях, с чем связано его поведение и на что следует опираться, чтобы всегда быть уверенным в ответе вне зависимости от сложности вопроса.
Это запись одной из глав моей книжки - JavaScript в картинках, задача которой была пояснить глазами спецификации как устроен JavaScript. Тем самым развенчивая, распространенные в JavaScript среде, мифы.
Telegram канал: t.me/AsForJava...
Ссылка на презентацию: docs.google.co...
Папка с примерами: drive.google.c...
Содержание
00:04:00 Вступление
00:07:29 Кому будет полезно это видео
00:08:30 О задачках про this
00:12:25 Начало
00:15:20 this и глобальное окружение
00:21:05 Script или Module?
00:30:19 Function environment
00:33:17 Arrow function
00:40:24 Внутри normal/ordinary function
00:41:52 Вызов функции при помощи call, apply, bind
00:46:41 Вызов функции при помощи new
00:51:08 Вызов функции в Dot нотации
00:55:22 Разбор примера вызова в дот нотации
00:55:22 Разбор второго примера вызова в дот нотации
00:58:34 Разбор третьего примера вызова в дот нотации
01:01:20 this и вызов внешнего API
01:10:40 Краткий итого всего что выше
01:18:20 Цитаты из книжки про тоже самое
01:22:20 Особенности non strict mode
01:25:40 Еще примеры с стрелочными функциями
01:42:50 Примеры где this связан с примитивными значениями, например строка или число
01:50:00 Пример как незнание логики работы языка, приводит к незаслуженной иронии

Опубликовано:

 

5 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 109   
@AsForJS
@AsForJS Год назад
TimeCode: 00:04:00 Вступление 00:07:29 Кому будет полезно это видео 00:08:30 О задачках про this 00:12:25 Начало 00:15:20 this и глобальное окружение 00:21:05 Script или Module? 00:30:19 Function environment 00:33:17 Arrow function 00:40:24 Внутри normal/ordinary function 00:41:52 Вызов функции при помощи call, apply, bind 00:46:41 Вызов функции при помощи new 00:51:08 Вызов функции в Dot нотации 00:55:22 Разбор примера вызова в дот нотации 00:55:22 Разбор второго примера вызова в дот нотации 00:58:34 Разбор третьего примера вызова в дот нотации 01:01:20 this и вызов внешнего API 01:10:40 Краткий итого всего что выше 01:18:20 Цитаты из книжки про тоже самое 01:22:20 Особенности non strict mode 01:25:40 Еще примеры с стрелочными функциями 01:42:50 Примеры где this связан с примитивными значениями, например строка или число 01:50:00 Пример как незнание логики работы языка, приводит к неуместной иронии
@BuggsSunny
@BuggsSunny Год назад
рад что снова выходишь в эфиры. Будут ли сео стримы?
@AsForJS
@AsForJS Год назад
@@BuggsSunny Только разве что ради вот таких как ты. Есть у меня одна горячая тема на этот счет. Может быть даже стоит сделать закрытую трансляцию только для своих.
@BuggsSunny
@BuggsSunny Год назад
@@AsForJS было бы класно. Каждый раз что-то новое открываю для себя на твоих стримах
@nouchance
@nouchance Год назад
@@AsForJS SPASIBO
@antonmas3451
@antonmas3451 Год назад
очень ждем стримы!!!
@ИванИванов-э5ш3э
@ИванИванов-э5ш3э 9 месяцев назад
Спасибо, Мурыч. Ты очень добрый человек. Так все разжевал, так переживаешь, что кто то не уловит. Столько заботы! А всякие шероховатости, о которых ты с юмором говоришь, делают эту работу по-настоящему ручной и ценной. Как шепот винила на музыке или шагрень на дереве. Информация заходит и остается в башке надежно, навсегда. Класс! Ты такой один! Ума в тебе море. Ум не в том, что бы быстро думать и трещать мышкой во всяких интерфейсах. Ум это глубина мысли и логика. Умение строить многоступенчатые логические конструкции
@toscaantosca4541
@toscaantosca4541 9 месяцев назад
это все замечательно и очень интересно - посмотрел короткую и длинную версию про this но беда в том, что на собеседовании большой шанс того, что попадется человек, который не знает этого. и будет ожидать шаблонных ответов и если начать умничать и поправлять собеседующего, что уязвит его гордость, то можно легко нарваться на "мы вам перезвоним" а может быть наоборот они оценят такие глубокие знания и предложат больше зарплату но благодаря вам я вдохновился изучать спеку и начал потихоньку учиться читать и разбираться в ней. спасибо!
@usernnxn
@usernnxn 9 месяцев назад
вот он пример яркой ошибки поколения. мы учим что-то не чтобы понять и использовать, стать лучше.а чтобы пройти собеседование вот что происходит околоJS и в этом вся боль этого языка
@БольшойБрат-з4р
@БольшойБрат-з4р 9 месяцев назад
От таких людей ты сам должен бежать аж чтоб пятки сверкали.
@eGusevWeb
@eGusevWeb 8 месяцев назад
Это самое лучшее и качественное объяснение во всём ютубе, что такое this)
@kozlov_egor
@kozlov_egor Год назад
Лучше объяснение this, что я видел. Благодарю
@andriichornyi9143
@andriichornyi9143 7 месяцев назад
Бесконечное тысячекратное уважение 🎉
@lvan_lvanov
@lvan_lvanov 9 месяцев назад
Господи, Мурыч, Вы прям талантище! Всем бы так объяснять как Вам!
@Oleg-tk2te
@Oleg-tk2te 10 месяцев назад
Идеальное объяснение что есть this в JS. Автору большое спасибо.
@_Good_Evening_
@_Good_Evening_ 9 месяцев назад
Мурыч, спасибо тебе огромное!!! Более понятного и сразу же подкрепленного спецификацией объяснения THIS на просторах ru сегмента youtube нет!!!
@kegorfx
@kegorfx Год назад
ох-ох-ох, какой же классный канал. прям физическое удовольствие от просмотра
@НурданАбдиев-м8м
@НурданАбдиев-м8м 3 месяца назад
Пересмотрел 3-4 видео, все запутано. Прочитал пару статей, стало еще хуже. И только сейчас все стало на места. Мурычу большой рахмат!
@DesertEagleNV
@DesertEagleNV 2 месяца назад
просмотр плохенького перед чем-то годным правильно проблематизирует тему и настраивает на лучшее понимание уже хорошего материала
@sjdjjsjsjs3991
@sjdjjsjsjs3991 Месяц назад
Я так же, долго не мог вникнуть во все эти области видимости, окружения, контексты, а Мурыч сразу же глаза открыл
@JenechekDv
@JenechekDv 10 месяцев назад
Спасибо! Каких только вариаций на тему this я не читал. Ты всё по полочкам разложил.
@7Denial7
@7Denial7 10 месяцев назад
Спасибо за шикарный урок! Действительно Javascript логичный и замечательный!
@ИльяБондаренко-т4е
@ИльяБондаренко-т4е 10 месяцев назад
Блин спасибо тебе большое, это просто имба видос. Который раз убеждаюсь что необходимо тщательно разобраться в теме и тогда никаких сюрпризов нет
@ivanbag9741
@ivanbag9741 8 месяцев назад
Огромное спасибо за видео! Лучшее объяснение this! Моё почтение!
@SERGIUS_ORIGINAL
@SERGIUS_ORIGINAL Год назад
Отличное видео! Вы с легкостью раскрываете секреты JavaScript, особенно тему "this". Очень информативно и понятно объяснено. Спасибо за урок!
@whoisleshalightmusic
@whoisleshalightmusic 9 месяцев назад
Дякую! Ти мабуть перша людина яка норм мене вчить! Величезне дякую!
@ДмитрийМитрохов-б3к
@ДмитрийМитрохов-б3к 8 месяцев назад
Огромное спасибо за этот ролик. Лучшее видео по теме определения this.
@botino-k
@botino-k 10 месяцев назад
Круто, что делишься знаниями и проработанной информацией. Спасибо!
@somename9877
@somename9877 Год назад
ВСе больше начинаю понимать язык благодаря Вам спасибо
@АлександрКасатов
Вы здорово умеете превращать запутанную предыдущими объясняльщиками мешанину в стройную и простую логическую систему. После просмотра вашего видео возник только один вопрос - к авторам тех видео и статей, которые я смотрел/изучал раньше - на хрена вы так все запутывали?) Ваш канал - однозначно топ по js на ютубе.
@strikerorion5290
@strikerorion5290 10 месяцев назад
Точно, самое адекватное объяснение среди прочих.
@lazys7151
@lazys7151 10 месяцев назад
Ролик просто огонь, очень помогло понять многие вещи с собеседований, спасибо Вам! Единственное, что хотелось бы спросить - будет ли когда-нибудь такой же подробный ролик с примерами, разборами задач с собеседований и так далее, но уже по замыканиям (которых в спецификации, конечно же, нету). Постоянно сыплюсь на этой теме на собеседованиях. Было бы ОООООоооочень полезно посмотреть решение типовых задачек с собеседований с Вашими комментариями и пояснениями по этой теме. Заранее благодарю!
@djekiseven1336
@djekiseven1336 10 месяцев назад
Однозначно это лучшее объяснение на русском языке))) Автору респект
@pvttrix
@pvttrix 8 месяцев назад
Не только на русском, реально снимаю шляпу здесь
@havrilyk4115
@havrilyk4115 10 месяцев назад
Дуже крутий спец)😊
@ADAshiller
@ADAshiller 8 месяцев назад
топовый контент! незаслуженно мало лайков и просмотров!
@vladtrall9296
@vladtrall9296 9 месяцев назад
Большое спасибо за лекцию!!!
@WewasKangs-bd9eb
@WewasKangs-bd9eb 9 месяцев назад
В основном, когда использую коллбеки, всегда использую bind() чтобы привязать методы к контексту, который мне нужен. Экономит кучу времени и бережет от багов. Особенно в случае с Ивентами
@maxonbigbon
@maxonbigbon 10 месяцев назад
Очень интересно, спасибо за труд
@Юрец1993
@Юрец1993 9 месяцев назад
Почему говорит академическим языком.... Но на много понятнее чем на сленге. Возможно это иллюстрации помогают понять но на данный момент это видео самое понятное из всех что я видел.... И информации больше и понимание легче
@maximstanovskiy1550
@maximstanovskiy1550 8 месяцев назад
Благодарю.
@wijionemaster1875
@wijionemaster1875 Год назад
Топчик, дякую за такі відео. Формують правильне розуміння і відкривають очі на теми, які псевдо-знатокі-блогери вбивають початківцям роками, не маючи ні наймешного уявлення про те, що вони говорять.
@demimurych1
@demimurych1 Год назад
Я зараз роблю його Українською. Дуже прошу потім прокоментувати усі помилки, особливо стосовно солов'їної.
@Boortwint
@Boortwint 10 месяцев назад
Признаться честно, о разнице strict mode для методов встроенных конструкторов я не знал. Как-то не додумался поэкспериментировать с данной особенностью методов в non strict для конструкторов String или Number. Видимо, к этому могут прийти только реверс-инженеры. А я только лишь прикладник. Но вот о чём я всегда знал, так это о том, что в нестрогом режиме выполнения this внутри нормальной функции, вызванной без дот-нотации, new и встроенных методов, будет содержать ссылку на глобальный объект окружения. В браузере это объект window, он же globalThis. Я был уверен, что в момент упоминания о нюансах вызова функций в строгом и не строгом режимах будет упомянута эта особенность, но, к счастью для себя, я получил новую информацию. Век живи - век учись!
@webminsk7884
@webminsk7884 9 месяцев назад
Где вашу книгу найти?
@701block
@701block 9 месяцев назад
В джаваскрипте нет глобальной области видимости ,потому что в джаваскрипте может быть несколько глобальных областей видимости))) Фраза супер,что еще сказать
@demimurych1
@demimurych1 5 месяцев назад
Эта фраза абсолютно верная, если Вы знаете спецификацию. согласно спецификации Global Enviroment это Enviroment который находится последний в цепочке окружений. То есть у него в parent стоит null. А теперь следите за руками - у Вас может быть несколько цепочек Enviroment которые так заканчиваются. Как следствие у вас может быть несколько Global Enviroment. Благодаря этому качеству, сейчас в proposal JavaScript вводится Shadow Realm API.
@swaytornado8327
@swaytornado8327 9 месяцев назад
Только за всю запись я не услышал о применении, зачем нам this нужен. К примеру, в Python, для методов класса нужно первым параметром указывать ключевое слово self, или любое другое, но оно должно быть первым. А когда ты создал экземпляр класса и вызываешь метод экземпляра класса, то self передаётся автоматом, так же, как и this , что было сказано автором. А от применение не очень ясно. А материал суперский, такого побольше бы в подтверждение документации
@TsArtemi
@TsArtemi 9 месяцев назад
ну имхо вы ж описали наиболее легитимный способ использования - в классах. А так "можете без него, лучше без него имхо" Ж) ибо поведение this для многих - магия и использование результат не необходимости и превращается в unmaintainable code. а контент да, крутой.
@golden_smiles
@golden_smiles 9 месяцев назад
к 1:07:00 Никакого нарушения спецификации языка при вызове коллбеков нет. Никто в спецификации никакому API не запрещает устанавливать this с помощью bind как угодно. Вот то что оно забинденное не меняет, ну это не консистент, да. Но опять же, к языку это не имеет отношения, ну создателям API так захотелось, проверяют prototype у функции.
@pavelharelyshau6106
@pavelharelyshau6106 8 месяцев назад
почему не консистент. Как по мне наоборот весьма логично
@de17eon50
@de17eon50 10 месяцев назад
Спасибо за видео! Что за книжка про js, которую вы упоминаете?
@ДмитрийВадюнин-т7д
@ДмитрийВадюнин-т7д 6 месяцев назад
Спасибо !!!
@user-eg9wp
@user-eg9wp 4 месяца назад
Привет, Мурыч. Отличное объяснение. Возник вопрос: с чем связано различное поведение new при различном способе задания метода объекта? const obj1 = { name: 'Obj1', fn: function() { console.log(this); } } const obj2 = { name: 'Obj2', fn() { console.log(this); } } new obj1.fn() // {} new obj2.fn() // obj2.fn is not a constructor
@YaniaRZ
@YaniaRZ 6 месяцев назад
Спасибо большое! Все понятно, наконец-то! А где книгу можно найти?
@demimurych1
@demimurych1 6 месяцев назад
пока нигде. но я запланировал ее публиковать по главам.
@wijionemaster1875
@wijionemaster1875 Год назад
Розумію, що не твій формат, але я уявляю який би був сильний курс від тебе по типу "Javascript, від а до я", маючи декілька років досвіду - пройшов би всі ази, навіть не задумуючись, впевнений, що багато чого упустив дивлячись пояснення тих "експертів") Хоча, дивлячись на твої детальні пояснення, думаю тривалість курсу була б годин 150 :D
@demimurych1
@demimurych1 Год назад
Саме це скоро і буде відбуватися. JavaScript такий який він є, або JavaScript очами специфікації. Саме як курс з самого початку до кінця.
@wijionemaster1875
@wijionemaster1875 Год назад
@@demimurych1 це прекрасна новина! з нетерпінням чекаємо анонсу!)
@Transguddit
@Transguddit 8 месяцев назад
@@demimurych1 Де можна подивитись цей курс, якщо він вже існує?
@СергейЛукашевский-п2щ
@СергейЛукашевский-п2щ 9 месяцев назад
Я вот понял, что host может задавать значение this для глобального окружения. Но почему в node ( non strict mode ) у нас console.log(this) отдаёт {}, а (function(){console.log(this)})() уже отдаёт глобальный объект. То есть host (node) установил {} как this для глобального окружения, внутри функции this у нас менять поведение никак не должен, так как strict mod`a нет, функция не является сторонним API, но мы получаем там совершенно другое значение. В браузере, например, в обоих случаях, в нестрогом режиме мы получим window. Host может менять this так же на других уровнях или я что-то не усвоил, что было изложено в рамках ролика и покрывает это поведение?
@AsForJS
@AsForJS 9 месяцев назад
В видео дано пояснение этого. В сааааамом конце. HOST среда согласно спецификации имеет право определить this на старте выполнения кода так, как HOST среде хочется. Если быть более точным - как зачесалась левая пятка программиста
@grantorino3465
@grantorino3465 9 месяцев назад
В браузера в use strict this равен undefined и с call,apply,bind тоже чуток ошибка, если после назначения этими методами вызвать эту фцию через new, то не поможет назначения, будет {}
@frstnmlstnm-it1mf
@frstnmlstnm-it1mf 3 месяца назад
А ещё this это ершы в ру раскладке
@muhamadaminibragimov5096
@muhamadaminibragimov5096 11 месяцев назад
Может все таки addEventListener не нарушает спецификацию JavaScript. Вед мы можем внутри функции который принимает callback написать все что угодно Например var obj = { myAddListener: function(callback) { this.callback = callback; this.callback(); delete this.callback; }, };
@__kawaii
@__kawaii 10 месяцев назад
Спасибо что открыл глаза
@andreyselin8076
@andreyselin8076 9 месяцев назад
Environment функции и то что в интернетах называют контекстом выполнения функции (объект, где живут все объявленные внутри функции идентификаторы) это одно и то же или контекст живет в рамках environment?
@AsForJS
@AsForJS 9 месяцев назад
Ecevution Context - это особая структура данных, ссылка накоторую находится в Execution Context Stack. Эта структура данных содержит внутри себя ВСЮ необходимую информацию о том, каким образом нужно выполнять текущий код с которым она связана. То есть, в том числе, она содержит ссылки и на коружения, которые дают возможность разобраться в том какие идентификаторы где используются. В том числе, Execution Context позволяет в прямом смысле этого слова, заморозить выполнение кода, который к нему привязан на любой комманде образом, который позволит в последствии его разморозить без потери чего бы то ни было в рамках языка JavaScript
@Jeneko4tube
@Jeneko4tube 9 месяцев назад
Что произойдет, согласно спецификации, если сначала определить this через .bind, а потом получившуюся функцию вызвать через new?
@klishe2541
@klishe2541 9 месяцев назад
Связанный this методом bind игнорируется , функция вызывается как конструктор, то есть this присваивается пустой объект. this = {}
@pavelharelyshau6106
@pavelharelyshau6106 8 месяцев назад
почему ты говоришь что внешние api в праве не подчиняться правилам js? По сути они просто являются такими же функциями внутри, которых не удивлюсь если что-то вроде этого же bind/call и делается. Я тоже могу написать свою функцию, в которой будут делать то же самое полностью в рамках js, выглядит как будто тут нет ничего незаконного function callAPI(callback) { callback.call('my personal this from api'); }; callAPI(function() { console.log(this); })
@КеримКорголоев-б3е
@КеримКорголоев-б3е 7 месяцев назад
Есть правило js, по которому определяется this -- та самая логическая цепочка из презентации. А есть api, которые это правило нарушают, используя инструменты js. Условно, правило было бы соблюдено, если бы мы в handler (addEventListener) биндили бы вручную, а не апи это делало за нас. P.S. я понял это так, если в чём-то ошибаюсь, то был бы благодарен за разъяснения
@pavelharelyshau6106
@pavelharelyshau6106 7 месяцев назад
@@КеримКорголоев-б3е мы передаем функцию параметром. И с этой функцией апи в праве делать че захочет. Интересный факт: если бы передадим уже забинженную функцию (для которой был вызван .bind(ourThis) ), то this останется тем которым мы указали в bind. Так что апи не делает ничего, что не мог бы стандартный js
@bfg5244
@bfg5244 9 месяцев назад
Возможно стоит добавить пример вызова call/apply/bind БЕЗ первого параметра
@lenafox6421
@lenafox6421 9 месяцев назад
@radunov.a
@radunov.a 9 месяцев назад
На соловьиной мове есть какие-то дополнительные земляческие плюшки?)
@askerkotsev363
@askerkotsev363 3 месяца назад
одна книга кайла симпсона решит все проблемы с this объектами да и с областями видимости
@TheRainGameTM
@TheRainGameTM Год назад
По поводу undefined в конце, наверное не совсем корректное доказательство т.к если написать к примеру globalThis.fsdfsddsadaf === undefined, то это все равно выдаст true т.к в globalThis нет fsdfsddsadaf. Или я где-то не прав или не понял?
@AsForJS
@AsForJS Год назад
Если я верно понял вопрос то - В видео этот момент рассмотрен в самом конце, что конечно же очень мешает восприятию. В самом конце видео сказано о том, как происходит работа с глобальным обьектом и отдельно с глобальным обьектом в нон стрикт mode. Это та часть JS за которую действительно его можно ругать. И появилась она благодаря, на мой взгляд ужасному решению по продавливанию в спецификацию конструкций let и const которые развалили, изначально стройную систему. В итоге мы сейчас имеем совершенно особенное поведение для Global Environment и для Global Object. Особым образом описанное в спецификации. С третей стороны, можно на все это взглянуть иначе - то есть как на ситуацию, когда сложно представить себе поведение, когда существует необходимость в проверке у глобального обьекта наличия какого-то property на его присутствие. То есть да Вы правы, когда обозначаете, что в случае globalThis поведение можно назвать специфическим. Но при этом, эта специфичность как бы никому и не нужна, потому, что сложно придумать задачу, где бы это было нужно. Если я верно понял вопрос. Если не верно, приведите мне пример (даже не работащий) кода, который бы иллюстрировал то о чем Вы хотели бы сказать. Я постараюсь вникнуть.
@TheRainGameTM
@TheRainGameTM Год назад
@@AsForJS Да, ответ на свой вопрос получил, спасибо
@Sergei546
@Sergei546 5 месяцев назад
топ
@ifuncuran
@ifuncuran 5 месяцев назад
кайф
@iryna-ielkina
@iryna-ielkina 7 месяцев назад
💙💛
@olegkulikov922
@olegkulikov922 9 месяцев назад
комментарии не комментируются((
@extremeScandalist
@extremeScandalist 5 месяцев назад
Это все зафиксировано в спецификации?
@demimurych1
@demimurych1 5 месяцев назад
все до каждого кубика блок схемы.
@ВаряДобровенская
@ВаряДобровенская 8 месяцев назад
Сложно)))) ())
@НикитаГвоздецкий-ы3ъ
Ви казали про вашу книжку, підкажіть будь ласка де її можна знайти?
@demimurych1
@demimurych1 Год назад
До 24.02 в мене був контракт з видавництвом, для якої готувався рукопис. Видавництво з росії. Тому контракт було розірвано. Але це на краще. Бо за цій час я зрозумів як все зробити ще краще. У планах запис циклу лекцій про JS, які завдяки інтерактивності будуть набагато ефективніше паперової версії. Я знаю, що обіцяв, як і інші особистості на ютубі, не випускати ще один курс з JS для початківців. Але, як показав досвід, те, як виглядає JS очима офіційної специфікації, значно відрізняється від того, що всі про нього розповідають. І це означає, що такий курс (набір лекцій) матиме абсолютно унікальний характер. І що не менш важливо, весь він буде підтверджений офіційною специфікацією. А найголовніше - дозволить зрозуміти мову програмування, що неможливо за теперішніх традицій її пояснення.
@НикитаГвоздецкий-ы3ъ
​@@demimurych1 З нетерпінням буду чекати. Вам бажаю удачі)
@ИльяБондаренко-т4е
@ИльяБондаренко-т4е 10 месяцев назад
Вот чорт, JS и правда логичен. А вот api проклятый
@s78ap
@s78ap 8 месяцев назад
Смотреть с 20 минуты, раньше смысла нет, профессор несёт какую-то нелегкую судьбу
@s78ap
@s78ap 8 месяцев назад
Нашёл короткую версию у Мурча, спасибо
@novichok3417
@novichok3417 Год назад
Вы борадатый мужик?
@ИльяБондаренко-т4е
@ИльяБондаренко-т4е 10 месяцев назад
очень
@amplifyy_
@amplifyy_ 8 месяцев назад
бессмысленный синтаксический мусор, который не имеет никакого практического смысла, чисто узнать кто самый "одаренный" на собесе (одарен в отрицательную сторону конечно)
@sjdjjsjsjs3991
@sjdjjsjsjs3991 8 дней назад
слишком много костылей породили быдлокодеры
@АнтонФомин-в3й
@АнтонФомин-в3й Месяц назад
const arrowF = () => console.log(this); function ordF() { arrowF(); } const o = { memberF: ordF, }; o.memberF(); могу ошибаться, но, если следовать алгоритму, наша нормальная функция тут вызывается с использованием dot нотации, а стрелочная функция внутри нее должна наследовать окружение и быть равна объекту, но выведено будет значение глобального окружения (среды) Укажите на ошибки, если я не прав
@demimurych1
@demimurych1 Месяц назад
Цепочка окружений формируется в момент декларации. То есть ваша arrow function никаким образом this из другого места вывести не может кроме как из того, на которое ссылается окружение, которое создано в момент определения arrow function уберите arrow function и поставте просто консоле лог, и получите результат который вы ожидаете. я много раз подчеркивал ранее, this по своему поведению - єто обычный идентификатор, который связывается со значением по особым правилам.
@АнтонФомин-в3й
@АнтонФомин-в3й Месяц назад
@@demimurych1 спасибо!
@OrangeCryptoAnalyzer
@OrangeCryptoAnalyzer 8 месяцев назад
Привет Мурыч! Спасибо за видео это очень полезно! Хочется уточнить. Здесь на 1:12:17 "ключевое слово new. Которое все привыкли видеть как слово которое якобы создает.., вызывает конструктор, мы создаем в нем новые объекты, или и т д Но с точки зрения спецификации это ключевое слово new, которое всего лишь навсего вызывает функцию внутри которой она связывает this с пустым объектом" И я сравниваю это с одним из видео по которым обучалась сама. Это канал "IT_Kamasutra" и видео "JS, что спрашивают на собеседованиях, репетиция, часть 1". В начале там говорят: "Любая функция может быть вызвана как функция-конструктор. Т.е. когда мы используем new функция- она начинает работать немного в хитрожопом режиме. У нее магия небольшая происходит. Внутри это функции (если ее вызвали как функц-констр-р.) внутри создается объект новый. Ссылка на который - this. И потом этот же this в конце неявным образом возвращается". И непосредственно вопрос. И что действительно new это лишь вызов ф. и связка this с {}. Т.е. никакого дополнительного функционала у new нет ни при каких условиях? Просто хочется уточнить дотошно) И еще раз спасибо за все эти видео! Это крутой контент. Кристина.
@demimurych1
@demimurych1 5 месяцев назад
Совершенно верно. Никакого дополнитиельного функционала там нет. Ни в случае вызова функции. Ни в случае вызова класса. Это просто вызов normal function, в которую передается this связанный с {}
@antonmas3451
@antonmas3451 Год назад
const myFavoriteObj = { guessThis() { const getName = () => { console.log(this.name); }; getName(); }, name: "Marko Polo", thisIsAnnoying(callback) { callback(); }, }; myFavoriteObj.guessThis(); // в этом случае ответ "Marko Polo" это легко . myFavoriteObj.thisIsAnnoying(function() { console.log(this); }); // но вот тут почему [object Window]? Может я рассуждаю не верно, поправьте кто понял тему хорошо: мы смотрим на this , он в нормальной функции? да в нормальной функции=>затем мы смотрим как функция была вызвана, call/bind/apply- нет , new - нет, dot notaiton - нет, она вызвана как callback, поэтому undefined в стрикт моде и глобал ... я верно рассуждаю?
@AsForJS
@AsForJS Год назад
Да верно. Абсолютно верно. Ровно такой же пример есть в видео. А вопрос в чем?
@antonmas3451
@antonmas3451 Год назад
@@AsForJS сначала растерялся как функция была вызвана, но пока писал-проговаривал, сам понял! Спасибо ,вам Мурыч, огромное, что наводите порядок в голове. Я статей 5-6 прочел по теме this , результат - одна сплошная каша в голове! очень ждем следующих тем!
@hvoarang
@hvoarang 7 месяцев назад
💙💛
Далее
Мои РОДИТЕЛИ - БОТАНЫ !
31:36
Просмотров 428 тыс.
Women’s Celebrations + Men’s 😮‍💨
00:20
LOLLIPOP-SCHUTZ-GADGET 🍭 DAS BRAUCHST DU!
00:28
Просмотров 11 млн
Event loop в Node.js
33:45
Просмотров 44 тыс.
Мои РОДИТЕЛИ - БОТАНЫ !
31:36
Просмотров 428 тыс.