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

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

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

  • @flab3rt
    @flab3rt 4 года назад +39

    Поддерживаю комментарии ниже. По Learn.js тему не понял, как и задачи, которые там приведены. Считаю, что они перегибают с ними, учитывая, что некоторые изучают программирование впервые.
    Но, благодаря автору данного видео в голове все прояснилось.
    Огромное спасибо, лайк && подписка!)

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

      Аналогично!

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

      Плюсую

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

      +++++

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

      На learn.js примеры не всегда полностью раскрывают тему, а задачи наоборот дают иногда углублённые

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

      Но кстати плюс небольшой, благодаря тому что не разъяснили полностью тему я ее изучил помимо лернjs на других источниках и познал лучше

  • @indigosay
    @indigosay 4 года назад +26

    Только после этого видео начал разбираться в декораторах. Кантора читал полдня, понять не мог.

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

      вот у меня как раз пол дня прошло. гляну этот видос

  • @nellimelik-ohanjanyan4346
    @nellimelik-ohanjanyan4346 3 года назад +3

    Большое спасибо, наконец освоила тему после просмотра. Совет новичкам- обязательно пишите и тестируйте код во время просмотра, так проще запоминается.

  • @user-bw2qr6iz2c
    @user-bw2qr6iz2c 4 года назад +6

    По поводу времени, это оптимизация на уровне интерпретатора Chrome(V8), после первого вызова функции он не формирует заново стэк вызова, так как работа идет внутри одного скрипта в той же сессии.

  • @mikaelgevorgyan4521
    @mikaelgevorgyan4521 3 года назад +6

    Это Владилен=)))!

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

      Я тоже сразу обратил внимание, искал долго эту тему у его и пришлось смотреть это.... а потом обрпдовался, т.к. он хооошо обьясняет

  • @temeralin.t
    @temeralin.t 3 года назад +6

    Владилен и тут тоже)

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

    Хороший материал. Сначала я разбирал декораторы на лерн.жс, материал там сложнее подан, но подробнее. Тут понятнее и нагляднее.

  • @Andrey-qf8uw
    @Andrey-qf8uw 4 года назад

    Автор, спасибо тебе большое !!!

  • @user-gh9zn8fd6e
    @user-gh9zn8fd6e 7 лет назад

    Спасибо! Было интересно!

  • @ojgenn
    @ojgenn 6 лет назад

    спасибо! очень познавательно и доступно

  • @user-gf5tx3eg8o
    @user-gf5tx3eg8o 5 лет назад

    Отличное видео, спасибо!

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

    Благодарю за видео! Декораторы освоены

  • @ihorkubrak1668
    @ihorkubrak1668 5 лет назад

    Спасибо, помог разобраться :-)

  • @user-qy9wq9jx3j
    @user-qy9wq9jx3j 5 лет назад

    Spasibo drushiwe

  • @sfx2916
    @sfx2916 5 лет назад

    Здравствуйте . А чем декоратор отличается от HOC ( компонент высшего порядка ) ?

  • @nikolai4100
    @nikolai4100 5 лет назад +6

    Здравствуйте! А почему за один вызов fac() в консоль выводится результат действия двух функций? Разве на 23 строчке не должно было переопределение быть?

    • @klubkov
      @klubkov 4 года назад

      Разобрались с этим?

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

      @@klubkov У меня такой же вопрос. И еще почему callCount в консоли идет раньше logResult'а?

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

      @@TheTiznone Потому что сначала выполняется ф-я callCountDecorator, которая выводит в консоль кол-во вызовов, далее в ней же идёт вызов return func.apply(this, arguments); , что приводит к вызову logResultDecorator , который выводит результат в консоль самой первой функции fac.
      Вот и получается, что сначала идёт вызов callCountDecorator далее=> logResultDecorator далее=> fac.
      Эти оба декоратора как бы "оборачивают" самую первую функцию fac.

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

      ​@@vosroix Меня смущало, что они обернуты как fac=>logResult=>callCount=>TimeDecorator, а выводятся в другом порядке. Но я разобрался, дело было в том, как внутри декораторов консоль логи стоят относительно func.apply, до/после. И, видимо, каждый последующий декоратор оборачивается поверх предыдущего, а не "переоборачивает" исходную функцию, что было бы важным уточнением для тупиц, типа меня

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 года назад

    Спасибо

  • @user-wgcb7hgn6a
    @user-wgcb7hgn6a 6 лет назад

    Почему сначала выводится результат функции callCountDecorator?

  • @user-rj6ro3mp1p
    @user-rj6ro3mp1p 5 лет назад +2

    Вооо, тут теперь более-менее понятно стало. В учебнике читал, дак почти ни***я не понял,но задачи решить вроде смог, не знаю, то ли опираясь на примеры решил, то ли таки что-то понял.

    • @user-gf5tx3eg8o
      @user-gf5tx3eg8o 5 лет назад +1

      Привет. Мы с тобой по одному учебнику учимся. ))) Я твои про обертки читал там, да и в других темах.

    • @user-rj6ro3mp1p
      @user-rj6ro3mp1p 5 лет назад

      @@user-gf5tx3eg8o, дак это хорошо, что еще могу сказать. И как успехи, освоил тему сразу же? Я дак тупенький, из учебника только со второго раза начал понимать что-то более-менее, и то не все и сразу.

    • @user-gf5tx3eg8o
      @user-gf5tx3eg8o 5 лет назад +2

      @@user-rj6ro3mp1p Я освоил только после просмотра этого видео. Потому что в учебнике я как-то тоже не с первого раза понимаю тему. Приходится муштровать её день-два. Зато помогает. ))) В нескольких источниках хорошо смотреть.
      А ты не думай, что ты тупенький. У нас есть цель, мы учим. И тупенькими будут те кому в этой жизни ничего не надо. )))

    • @user-rj6ro3mp1p
      @user-rj6ro3mp1p 5 лет назад

      @@user-gf5tx3eg8o, наверно твоя правда, по крайней мере будем на то надеяться😂

    • @user-gf5tx3eg8o
      @user-gf5tx3eg8o 5 лет назад

      @@user-rj6ro3mp1p Москва не сразу строилась!🙋💪😁 Будем учить.

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

    Извините, не понял почему именно в этом примере нельзя просто закинуть ...arg (то есть оператор расширения)?? На 8:50

    • @timashoff
      @timashoff 2 года назад +2

      видео от 2017 года, если не раньше... получить все аргументы функции можно было только с помощью псевдомассива arguments.

  • @user-bv4vw3uh6h
    @user-bv4vw3uh6h 7 лет назад

    Много интересного взял с этого видео. Это для тестировки как я понимаю фича.

    • @NextgenSocialReptile
      @NextgenSocialReptile 7 лет назад +4

      Не обязательно, зачастую можно увидеть декораторы во фреймворках. Например для расширения функционала базового класса чтобы получить частные случаи
      Об этом чуть позже будут уроки

  • @bsbbsb4998
    @bsbbsb4998 5 лет назад

    Почему fib(30) по времени больше fib(31). Мы сами кэшируем fib(30). В итоге fib(31) одна операция сложения, а именно сумма закэшированых результатов fib(30) и fib(29). Попробуйте убрать кэширование и будет правильное время выполнение. Возможно, не проверял.

  • @_renamed_
    @_renamed_ 5 лет назад

    Скажите, зачем this передавать в первом примере? Если там пустой контекст все равно. Корректно ли передать просто пустую строку?

    • @kto-towse9378
      @kto-towse9378 5 лет назад +1

      строку 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 года назад +1

      @@kto-towse9378 - вы не до конца понимаете что такое контекст в javascript.

    • @user-lg9ve4zu4v
      @user-lg9ve4zu4v 4 года назад

      @@_renamed_ - в данном случае да, не имеет значения. Но если в будущем оригинальная функция факториала/фибоначи будет переписана так, что контекст будет как-то использоваться, то переписывать декораторы не придётся.

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

    Наверно стоит упомянуть, что решение фиббоначи через рекурсию - это плохое решение задачи. Есть намного более оптимальный способ
    А по теме видео, спасибо, в голове что-то проясняется

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

    голос похож на Владилена Минина

    • @user-xq1yz3fb6c
      @user-xq1yz3fb6c 3 года назад

      @@webformyself а какой смысл ему было работать с вами? Почему он изначально не создал канал на котором выпускал бы подобные видео

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

    можно было лог декоратор перенести ниже лога кеша и тогда все заработало бы

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

    Т.к. браузер оптимизирует функцию, поэтому время выполнения меньше при последующих вызовах

  • @teknikmail
    @teknikmail 7 лет назад +2

    А чем тогда декоратор отличатся от замыкания?

    • @NextgenSocialReptile
      @NextgenSocialReptile 7 лет назад

      Шашенков Алексей декоратор это функция обёртка, замыкание это возможность языка, то есть инструмент для реализации

    • @PacoOfficial
      @PacoOfficial 7 лет назад +1

      Замыкание - это функция вместе со всеми внешними переменными, которые ей доступны.

    • @user-bv4vw3uh6h
      @user-bv4vw3uh6h 7 лет назад

      При выполнении функций действуют области видимости переменных, которые имелись на момент их определения, а не на момент вызова.

  • @kr8636
    @kr8636 7 лет назад

    Здравствуйте! Вы снимали видео про парсинг сайтов с помощью php библиотеки phpQuery. Могли бы вы снять такой же урок только рассказать в нем как парсить содержание публикации. Помогите пожалуйста для меня это очень важно.

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

    А её зачем перезаписывать не лучше в новую переменную???

  • @mikaelgevorgyan4521
    @mikaelgevorgyan4521 4 года назад

    performance.now is not a function
    Stack:
    не является функцией
    стек:
    Вот это у меня вывело ((((,что делать?

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

      у меня тоже, нагуглил очень быстро

  • @useruser-ie5tp
    @useruser-ie5tp 2 года назад +1

    Владилен, ты ли это?

  • @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, не зная того, что такое факториал