Что такое декораторы в JavaScript

  Рет қаралды 20,985

WebForMySelf

WebForMySelf

7 жыл бұрын

Премиум уроки по созданию сайта:
webformyself.com/category/pre...
JavaScript очень гибкий язык и он позволяет пользоваться такими вещами, как декораторы. В данном уроке мы разберем, что это такое, зачем декораторы нужны и как ими пользоваться
Из урока вы узнаете, что такое декораторы в javascript, зачем они нужны и как создавать декораторы, используя чистый javascript.
Что такое декораторы в JavaScript - • Что такое декораторы в...

Пікірлер: 82
@indigosay
@indigosay 4 жыл бұрын
Только после этого видео начал разбираться в декораторах. Кантора читал полдня, понять не мог.
@andrei8299
@andrei8299 4 жыл бұрын
вот у меня как раз пол дня прошло. гляну этот видос
@flab3rt
@flab3rt 4 жыл бұрын
Поддерживаю комментарии ниже. По Learn.js тему не понял, как и задачи, которые там приведены. Считаю, что они перегибают с ними, учитывая, что некоторые изучают программирование впервые. Но, благодаря автору данного видео в голове все прояснилось. Огромное спасибо, лайк && подписка!)
@crokodiljs950
@crokodiljs950 3 жыл бұрын
Аналогично!
@nun8930
@nun8930 3 жыл бұрын
Плюсую
@3PuY
@3PuY 3 жыл бұрын
+++++
@VikMoc
@VikMoc 3 жыл бұрын
На learn.js примеры не всегда полностью раскрывают тему, а задачи наоборот дают иногда углублённые
@nun8930
@nun8930 3 жыл бұрын
Но кстати плюс небольшой, благодаря тому что не разъяснили полностью тему я ее изучил помимо лернjs на других источниках и познал лучше
@nellimelik-ohanjanyan4346
@nellimelik-ohanjanyan4346 3 жыл бұрын
Большое спасибо, наконец освоила тему после просмотра. Совет новичкам- обязательно пишите и тестируйте код во время просмотра, так проще запоминается.
@user-gh9zn8fd6e
@user-gh9zn8fd6e 7 жыл бұрын
Спасибо! Было интересно!
@user-gf5tx3eg8o
@user-gf5tx3eg8o 5 жыл бұрын
Отличное видео, спасибо!
@ojgenn
@ojgenn 6 жыл бұрын
спасибо! очень познавательно и доступно
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
Это Владилен=)))!
@whataboutism3387
@whataboutism3387 3 жыл бұрын
Я тоже сразу обратил внимание, искал долго эту тему у его и пришлось смотреть это.... а потом обрпдовался, т.к. он хооошо обьясняет
@Andrey-qf8uw
@Andrey-qf8uw 4 жыл бұрын
Автор, спасибо тебе большое !!!
@ihorkubrak1668
@ihorkubrak1668 5 жыл бұрын
Спасибо, помог разобраться :-)
@mishagarkach
@mishagarkach 3 жыл бұрын
Хороший материал. Сначала я разбирал декораторы на лерн.жс, материал там сложнее подан, но подробнее. Тут понятнее и нагляднее.
@temeralin.t
@temeralin.t 4 жыл бұрын
Владилен и тут тоже)
@user-qy9wq9jx3j
@user-qy9wq9jx3j 5 жыл бұрын
Spasibo drushiwe
@VikMoc
@VikMoc 3 жыл бұрын
Благодарю за видео! Декораторы освоены
@user-bw2qr6iz2c
@user-bw2qr6iz2c 4 жыл бұрын
По поводу времени, это оптимизация на уровне интерпретатора Chrome(V8), после первого вызова функции он не формирует заново стэк вызова, так как работа идет внутри одного скрипта в той же сессии.
@Antonio-fm1sq
@Antonio-fm1sq 3 жыл бұрын
Спасибо
@sfx2916
@sfx2916 5 жыл бұрын
Здравствуйте . А чем декоратор отличается от HOC ( компонент высшего порядка ) ?
@user-bv4vw3uh6h
@user-bv4vw3uh6h 7 жыл бұрын
Много интересного взял с этого видео. Это для тестировки как я понимаю фича.
@NextgenSocialReptile
@NextgenSocialReptile 7 жыл бұрын
Не обязательно, зачастую можно увидеть декораторы во фреймворках. Например для расширения функционала базового класса чтобы получить частные случаи Об этом чуть позже будут уроки
@nikolai4100
@nikolai4100 6 жыл бұрын
Здравствуйте! А почему за один вызов fac() в консоль выводится результат действия двух функций? Разве на 23 строчке не должно было переопределение быть?
@klubkov
@klubkov 4 жыл бұрын
Разобрались с этим?
@TheTiznone
@TheTiznone 4 жыл бұрын
@@klubkov У меня такой же вопрос. И еще почему callCount в консоли идет раньше logResult'а?
@vosroix
@vosroix 4 жыл бұрын
@@TheTiznone Потому что сначала выполняется ф-я callCountDecorator, которая выводит в консоль кол-во вызовов, далее в ней же идёт вызов return func.apply(this, arguments); , что приводит к вызову logResultDecorator , который выводит результат в консоль самой первой функции fac. Вот и получается, что сначала идёт вызов callCountDecorator далее=> logResultDecorator далее=> fac. Эти оба декоратора как бы "оборачивают" самую первую функцию fac.
@TheTiznone
@TheTiznone 4 жыл бұрын
​@@vosroix Меня смущало, что они обернуты как fac=>logResult=>callCount=>TimeDecorator, а выводятся в другом порядке. Но я разобрался, дело было в том, как внутри декораторов консоль логи стоят относительно func.apply, до/после. И, видимо, каждый последующий декоратор оборачивается поверх предыдущего, а не "переоборачивает" исходную функцию, что было бы важным уточнением для тупиц, типа меня
@user-rj6ro3mp1p
@user-rj6ro3mp1p 5 жыл бұрын
Вооо, тут теперь более-менее понятно стало. В учебнике читал, дак почти ни***я не понял,но задачи решить вроде смог, не знаю, то ли опираясь на примеры решил, то ли таки что-то понял.
@user-gf5tx3eg8o
@user-gf5tx3eg8o 5 жыл бұрын
Привет. Мы с тобой по одному учебнику учимся. ))) Я твои про обертки читал там, да и в других темах.
@user-rj6ro3mp1p
@user-rj6ro3mp1p 5 жыл бұрын
@@user-gf5tx3eg8o, дак это хорошо, что еще могу сказать. И как успехи, освоил тему сразу же? Я дак тупенький, из учебника только со второго раза начал понимать что-то более-менее, и то не все и сразу.
@user-gf5tx3eg8o
@user-gf5tx3eg8o 5 жыл бұрын
@@user-rj6ro3mp1p Я освоил только после просмотра этого видео. Потому что в учебнике я как-то тоже не с первого раза понимаю тему. Приходится муштровать её день-два. Зато помогает. ))) В нескольких источниках хорошо смотреть. А ты не думай, что ты тупенький. У нас есть цель, мы учим. И тупенькими будут те кому в этой жизни ничего не надо. )))
@user-rj6ro3mp1p
@user-rj6ro3mp1p 5 жыл бұрын
@@user-gf5tx3eg8o, наверно твоя правда, по крайней мере будем на то надеяться😂
@user-gf5tx3eg8o
@user-gf5tx3eg8o 5 жыл бұрын
@@user-rj6ro3mp1p Москва не сразу строилась!🙋💪😁 Будем учить.
@user-wgcb7hgn6a
@user-wgcb7hgn6a 6 жыл бұрын
Почему сначала выводится результат функции callCountDecorator?
@viktorOnopko777
@viktorOnopko777 4 жыл бұрын
голос похож на Владилена Минина
@user-xq1yz3fb6c
@user-xq1yz3fb6c 4 жыл бұрын
@@webformyself а какой смысл ему было работать с вами? Почему он изначально не создал канал на котором выпускал бы подобные видео
@andrei8299
@andrei8299 4 жыл бұрын
Наверно стоит упомянуть, что решение фиббоначи через рекурсию - это плохое решение задачи. Есть намного более оптимальный способ А по теме видео, спасибо, в голове что-то проясняется
@strongcat844
@strongcat844 2 жыл бұрын
можно было лог декоратор перенести ниже лога кеша и тогда все заработало бы
@dfdf6381
@dfdf6381 3 жыл бұрын
Извините, не понял почему именно в этом примере нельзя просто закинуть ...arg (то есть оператор расширения)?? На 8:50
@timashoff
@timashoff 2 жыл бұрын
видео от 2017 года, если не раньше... получить все аргументы функции можно было только с помощью псевдомассива arguments.
@bsbbsb4998
@bsbbsb4998 5 жыл бұрын
Почему fib(30) по времени больше fib(31). Мы сами кэшируем fib(30). В итоге fib(31) одна операция сложения, а именно сумма закэшированых результатов fib(30) и fib(29). Попробуйте убрать кэширование и будет правильное время выполнение. Возможно, не проверял.
@_renamed_
@_renamed_ 5 жыл бұрын
Скажите, зачем this передавать в первом примере? Если там пустой контекст все равно. Корректно ли передать просто пустую строку?
@kto-towse9378
@kto-towse9378 5 жыл бұрын
строку func.apply( this, argument) можно прочитать так: эй apply возьми функцию func и вызови её как метод обекта this, а в параметры функции func подставь arguments, а т.к как this в данном случае равен window то функция func будет вызвана как метод обекта window, т.е func() или тоо же самое, что и window.func(). A теперь подставь вместо this пустую строку и прочита мое сообщение сначала, только вместо this и window подставь пустую строку )))))))))
@_renamed_
@_renamed_ 5 жыл бұрын
@@kto-towse9378 Но ведь работает же и с пустой строкой.
@user-lg9ve4zu4v
@user-lg9ve4zu4v 4 жыл бұрын
@@kto-towse9378 - вы не до конца понимаете что такое контекст в javascript.
@user-lg9ve4zu4v
@user-lg9ve4zu4v 4 жыл бұрын
@@_renamed_ - в данном случае да, не имеет значения. Но если в будущем оригинальная функция факториала/фибоначи будет переписана так, что контекст будет как-то использоваться, то переписывать декораторы не придётся.
@artsempaulenka1296
@artsempaulenka1296 3 жыл бұрын
Т.к. браузер оптимизирует функцию, поэтому время выполнения меньше при последующих вызовах
@kr8636
@kr8636 7 жыл бұрын
Здравствуйте! Вы снимали видео про парсинг сайтов с помощью php библиотеки phpQuery. Могли бы вы снять такой же урок только рассказать в нем как парсить содержание публикации. Помогите пожалуйста для меня это очень важно.
@teknikmail
@teknikmail 7 жыл бұрын
А чем тогда декоратор отличатся от замыкания?
@NextgenSocialReptile
@NextgenSocialReptile 7 жыл бұрын
Шашенков Алексей декоратор это функция обёртка, замыкание это возможность языка, то есть инструмент для реализации
@PacoOfficial
@PacoOfficial 7 жыл бұрын
Замыкание - это функция вместе со всеми внешними переменными, которые ей доступны.
@user-bv4vw3uh6h
@user-bv4vw3uh6h 7 жыл бұрын
При выполнении функций действуют области видимости переменных, которые имелись на момент их определения, а не на момент вызова.
@mikaelgevorgyan4521
@mikaelgevorgyan4521 3 жыл бұрын
А её зачем перезаписывать не лучше в новую переменную???
@useruser-ie5tp
@useruser-ie5tp 2 жыл бұрын
Владилен, ты ли это?
@mikaelgevorgyan4521
@mikaelgevorgyan4521 4 жыл бұрын
performance.now is not a function Stack: не является функцией стек: Вот это у меня вывело ((((,что делать?
@andrei8299
@andrei8299 4 жыл бұрын
у меня тоже, нагуглил очень быстро
@seam3815
@seam3815 6 жыл бұрын
Не понял, зачем вызывать с через apply если контекст будет все равно один и тот же и тем более в функциях нет не одной переменной к которой можно было обратиться из контекста? В чем разница мы ведь не с объектами работаем?
@ignatspornov8295
@ignatspornov8295 6 жыл бұрын
Здесь apply вызывается не ради того, чтобы задать контекст, а для того, чтобы иметь возможность передать функции в качестве аргумента массив. Apply принимает массив с какими-либо аргументами, грубо говоря, "достает" эти аргументы и передает их в функцию, у которой он был вызван (в данном случае у функции func). Например: func.apply(this, [1]) - в функцию func будет передан один аргумент "1"(равносильно func(1)); func.apply(this, [1, 2]) - в функцию func будут переданы аргументы "1" и "2"(равносильно func(1, 2));
@Andrey-qf8uw
@Andrey-qf8uw 4 жыл бұрын
функция тоже обект
@Ogr285
@Ogr285 3 жыл бұрын
БОльщую часть ролика время тратится на решение проблем функционала декораторов, а не на объяснение самих декораторов.
@utlookworld5784
@utlookworld5784 3 жыл бұрын
Да что же это такое! Почему все эти декораторы называют по-разному? То - Обертки, то - Wrappers, то Функции- Обертки, то Декораторы. Не путайте новичков!
@utlookworld5784
@utlookworld5784 3 жыл бұрын
А урок хороший :) Спасибо!
@user-il3xh5di2i
@user-il3xh5di2i 4 жыл бұрын
Было бы странно, что человек интересуется паттернами js, не зная того, что такое факториал
DEFINITELY NOT HAPPENING ON MY WATCH! 😒
00:12
Laro Benz
Рет қаралды 39 МЛН
Happy 4th of July 😂
00:12
Pink Shirt Girl
Рет қаралды 60 МЛН
DO YOU HAVE FRIENDS LIKE THIS?
00:17
dednahype
Рет қаралды 94 МЛН
마시멜로우로 체감되는 요즘 물가
00:20
진영민yeongmin
Рет қаралды 14 МЛН
Что такое рекурсия. Фундаментальный JavaScript
20:32
Михаил Непомнящий
Рет қаралды 22 М.
Новые декораторы в TypeScript 5.0!
23:51
PurpleSchool | Anton Larichev
Рет қаралды 10 М.
Урок 5. JavaScript. Promise. Что это, как работает (+ пример)
23:18
Что такое и как работают замыкания (closures) в JavaScript?
13:55
Изучим методы функций call, apply, bind в JavaScript
33:07
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 9 М.
TypeScript #11 Декораторы (Decorators)
7:42
webDev
Рет қаралды 41 М.
DEFINITELY NOT HAPPENING ON MY WATCH! 😒
00:12
Laro Benz
Рет қаралды 39 МЛН