Глубокое копирование объекта в JavaScript

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 พ.ย. 2024

ความคิดเห็น • 105

  • @nikolaysmolov8031
    @nikolaysmolov8031 ปีที่แล้ว +7

    Здорово! Не знал про этот метод! Спасибо!

  • @MrKirTer
    @MrKirTer ปีที่แล้ว +9

    Михаил, спасибо. Адекватно, просто, информативно. И так по всему вашему контенту. 🤘

  • @anonlog
    @anonlog ปีที่แล้ว +6

    Очень полезно, новый метод клонирования, просто агонь))

  • @Mikjagger1
    @Mikjagger1 ปีที่แล้ว +5

    Как обычно , круто и полезно! Спасибо, надо ещё!

  • @АлексейФиленко-ф4к
    @АлексейФиленко-ф4к ปีที่แล้ว +5

    Как всегда коротко и полезно, спасибо)

  • @ivanfadeev5389
    @ivanfadeev5389 ปีที่แล้ว +1

    Не знал об этом! Спасибо! 🔥🔥🔥🔥

  • @vladimirmuratov2220
    @vladimirmuratov2220 ปีที่แล้ว +1

    Большое спасибо. Как всегда интересно 🙂

  • @bagga_lev
    @bagga_lev ปีที่แล้ว

    Михаил, спасибо за такое познавательное видео !

  • @AntonioBenderas
    @AntonioBenderas ปีที่แล้ว +5

    Михаил просто чудотворец. Только вчера учил клонирование и не хватало дип клона и тут хоба

    • @workaccount6372
      @workaccount6372 ปีที่แล้ว +1

      У меня так тоже было, когда нужно было на проекте забрать кастомные скроллы, и видео Михаила вышло на эту тему чуть ли не в тотрже день (видео про либу overlayScrollbars)

  • @vladtkachenko5095
    @vladtkachenko5095 ปีที่แล้ว +2

    спасибо за видео! очень полезно, как всегда. И своевременно, тоже как всегда )

  • @curillaenator
    @curillaenator ปีที่แล้ว +1

    Комментарий в поддержу👍

  • @uncle_ara
    @uncle_ara ปีที่แล้ว

    Спасибо за видео!

  • @ДроновАлександр-г3б
    @ДроновАлександр-г3б ปีที่แล้ว +2

    Круто!

  • @tukituk2759
    @tukituk2759 ปีที่แล้ว

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

  • @nardo988
    @nardo988 ปีที่แล้ว

    Большое спасибо за видео. Было очень полезно!

  • @EuegenTv
    @EuegenTv ปีที่แล้ว +9

    В целом понятно, что Lodash - наше всё :D

    • @awenn2015
      @awenn2015 ปีที่แล้ว

      Либа отменная

    • @КириллМохначевский-о3ю
      @КириллМохначевский-о3ю ปีที่แล้ว

      Не ставь лодаш полностью. А ставь конкретно утилиту

    • @Kleo_Wyatt
      @Kleo_Wyatt ปีที่แล้ว

      Вроде как если исходный объект содержит циклические ссылки, то могут быть ошибки при использовании данного метода

  • @exx-ns4tt
    @exx-ns4tt ปีที่แล้ว

    не знал, благодарю!

  • @iwannabekoshka
    @iwannabekoshka ปีที่แล้ว

    Балдежное видео, полезное

  • @Mexanikkmm
    @Mexanikkmm ปีที่แล้ว +3

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

    • @bebeto123g
      @bebeto123g ปีที่แล้ว +1

      Думаю полифил из того же lodash уже есть)

  • @workaccount6372
    @workaccount6372 ปีที่แล้ว

    Написать рекурсивную функцию глубокого копирования объектов -- и будет вам счастье)) Михаил, спасибо за видео!

  • @ertar0
    @ertar0 ปีที่แล้ว

    спасибо!

  • @xman5911
    @xman5911 7 หลายเดือนก่อน

    респект

  • @kot-duott
    @kot-duott ปีที่แล้ว +5

    Очень полезное видео, спасибо! Интересно, почему во всех мануалах в сети приводятся методы с ..., JSON или object.assign, но не этот

    • @asmal832-hi
      @asmal832-hi ปีที่แล้ว +1

      Это достаточно новый метод в js.

  • @7iomka
    @7iomka ปีที่แล้ว

    deepmerge из npm берём и будет сказка)

  • @tnsaturday
    @tnsaturday 5 หลายเดือนก่อน

    Крепко обрейтузился

  • @ВладиславСвидерский-г6й
    @ВладиславСвидерский-г6й ปีที่แล้ว

    большое спасибо за видео!
    было очень полезно!

  • @RamaRama-qv3jo
    @RamaRama-qv3jo ปีที่แล้ว

    Михаил, вы упомянули про деструктуризацию и спред оператор для копирования , но она пригодна и для глубокого копирования со вложенностями. Раскройте эту тему тоже.

  • @AlexandruBejenari
    @AlexandruBejenari ปีที่แล้ว

    thx!!!

  • @lessons3141
    @lessons3141 ปีที่แล้ว +3

    Михаил, а что за ИДЕ и используете в видео? интересует как логи видно сразу сбоку без браузера консоли. это расширение в иде?

    • @nikitazharinov2329
      @nikitazharinov2329 ปีที่แล้ว +4

      Quokka расширение для vs code

    • @philipryazankin1073
      @philipryazankin1073 ปีที่แล้ว

      Думаю это quokka c подпиской

    • @mishanep
      @mishanep  ปีที่แล้ว +5

      Это Quokka без всяких подписок =)

  • @arti8572
    @arti8572 ปีที่แล้ว +3

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

    • @aleksprimetv
      @aleksprimetv ปีที่แล้ว +3

      возможно quokka

    • @mishanep
      @mishanep  ปีที่แล้ว +7

      Это Quokka. У нее есть ограничения в бесплатной версии, но в моем случае ее хватило.

  • @sober4you1
    @sober4you1 ปีที่แล้ว

    Может быть видео про immer js?

  • @some_body_qtyeeuy
    @some_body_qtyeeuy ปีที่แล้ว +1

    Круто! А как называется расширение, которое выводит логи прямо в редакторе?

  • @IQ-120
    @IQ-120 2 หลายเดือนก่อน

    Ну, окей! А в каких случаях требуется копирование экземпляра? Чтобы так пыжить...? Вот, там была шняга с блобом и чем-то... Нафига ее копировать? Может по старинке - вспомнить про конструктор? Я на с# пишу.. там рефлекшен есть :) а это, прям извращения над функцией...

  • @grantorino3465
    @grantorino3465 ปีที่แล้ว

    Что за плагин в vscode использовался для отображения результата?

  • @gtaplayer4145
    @gtaplayer4145 ปีที่แล้ว

    StructuredClone некоторыми браузерами не поддерживается. И как мне тогда глубоко копировать, и не применять при этом сторонние библиотеки?

  • @dosenk109
    @dosenk109 ปีที่แล้ว

    Good

  • @user-artem-busyhin
    @user-artem-busyhin ปีที่แล้ว

    ❤‍🔥

  • @ashimov1970
    @ashimov1970 ปีที่แล้ว

    Михаил, большое спасибо за информацию. А есть ли встроенная функция у JS для глубокого сравнения объектов?

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      Не встречал.

  • @yushato
    @yushato ปีที่แล้ว

    Михаил, подскажите, как называется плагин, который сразу подсказывает что выведет ответ? Впервые увидела на видео, тоже хочу 😊

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      Это quokka

  • @snatvb
    @snatvb ปีที่แล้ว +3

    это не JS метод, а метод в браузере или другом окружении, в частности описан в спецификации HTML

  • @АндрейПоляков-е5н
    @АндрейПоляков-е5н ปีที่แล้ว +1

    Спасибо за ролик. Вопрос, почему все так пытаются избегать _. говоря - не тянуть же библиотеку ради одной функции, но на реальном проекте, скорее всего будет потребность не в одной, а в нескольких функциях из _. Может тогда просто смириться с этим?

    • @mishanep
      @mishanep  ปีที่แล้ว +4

      Здесь возможны разные сценарии. Я работал и на проектах с lodash, и без него, но с Ramda, и без библиотек хэлперов вовсе. Lodash был мегаактуален, когда нативными средствами языка было сложнее что-то сделать. С развитием языка актуальность внешней библиотеки снижается. Это как с jQuery.
      Лично мне больше нравится Ramda за ее функциональный подход. Она, помимо функционала, делает читабельность кода совсем иной. А если мне нужен просто вызов функции с присвоением результата в переменную и я могу обойтись без библиотеки, то скорее всего я так и сделаю.

    • @andTutin
      @andTutin ปีที่แล้ว +1

      почему бы и нет, весь лодаш не пойдет в бандл

    • @dzmitrysatsukevich805
      @dzmitrysatsukevich805 ปีที่แล้ว +4

      Ну у нас на проекте отдельно установлен только isEqual из лодаша, потому что только им пользуемся

    • @yuriyula
      @yuriyula ปีที่แล้ว +3

      Или просто установить через npm i lodash.clonedeep, и тогда вся библиотека и не потянется)

  • @ДмитрийРева-щ3ф
    @ДмитрийРева-щ3ф ปีที่แล้ว

    Подскажите, пожалуйста, если копия на методы не распространяется то повлияет вызов метода у копии на оригинальный обьект? Если да то можно ли избежать этого?

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      Копия на методы не распространяется - обычно обозначается, что у копии не будет методов как таковых. Разве что стандартные методы объекта, но без тех, что могли быть добавлены оригиналу.

    • @ДмитрийРева-щ3ф
      @ДмитрийРева-щ3ф ปีที่แล้ว

      @@mishanep Спасибо

  • @my_zalizniak
    @my_zalizniak ปีที่แล้ว

    Как называется расширение, чтоб консоль лог результат в редакторе выводил?)

    • @yuriyula
      @yuriyula ปีที่แล้ว

      quokka

  • @Oevka
    @Oevka ปีที่แล้ว

    А как тогда скопировать гетеры, методы и т.д.? Просто johnClone extends john?

    • @mishanep
      @mishanep  ปีที่แล้ว

      Extends это уже про наследование в классах. Это немного о другом, но да - таким образом методы родительского класса, равно как геттеры/сеттеры, будет наследоваться.

    • @Oevka
      @Oevka ปีที่แล้ว

      спасибо!

  • @vladimirmuratov2220
    @vladimirmuratov2220 ปีที่แล้ว

    Михаил, вопрос не по теме: знакомы ли Вы с Flutter? Очень надеюсь что да... ☺

    • @mishanep
      @mishanep  ปีที่แล้ว

      Здравствуйте, Владимир. Никогда с ним не работал =)

  • @pvinnie3827
    @pvinnie3827 ปีที่แล้ว

    все хорошо, но звук как из трубы

  • @hhhhferttuhyrgsa
    @hhhhferttuhyrgsa ปีที่แล้ว

    Можно реальный пример на практике, когда нам пригодиться клонировать объект, теория хорошо, но мне интересно, где это вообще применяется в практике?

    • @nade3282
      @nade3282 ปีที่แล้ว

      у тебя есть большая форма, для нее можно создать 2 переменные, одна будет для заполнения этой формы, вторая пустая, для последующей очистки формы

    • @asmal832-hi
      @asmal832-hi ปีที่แล้ว

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

  • @dimon7511
    @dimon7511 ปีที่แล้ว

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

    • @hola-ig9gb
      @hola-ig9gb ปีที่แล้ว

      Если такое будет нужно то прийдёться писать,а так ни разу не пригождалось,так то это не очень сложно.

  • @dimasheiko
    @dimasheiko ปีที่แล้ว

    structuredClone безусловно крутой метод, но у него пока что очень плохая поддержка браузерами? Только относительно самые свежие. Разве не так?

    • @mishanep
      @mishanep  ปีที่แล้ว +7

      JS доступен не только в браузерах. Плюс для браузеров существуют полифиллы.
      Я считаю, что неплохо как минимум узнавать про новые возможности, даже если мы не можем начать их использовать в своих проектах с сегодняшнего дня.

    • @dimasheiko
      @dimasheiko ปีที่แล้ว +2

      @@mishanep Безусловно. Спасибо за ответ!

  • @The14Some1
    @The14Some1 ปีที่แล้ว

    А что за плагин показывает результат console log без запуска кода на выполнение? Как это вообще работает без запуска кода?

    • @The14Some1
      @The14Some1 ปีที่แล้ว

      Полистал внизу. Михаил, вам стоит снять про quokka ролик :)

  • @iGotton
    @iGotton ปีที่แล้ว

    +

  • @AntonioBenderas
    @AntonioBenderas ปีที่แล้ว

    А как это консоль выводится прямо в коде?

    • @empatij1730
      @empatij1730 ปีที่แล้ว +1

      автор в паре комментов ответил - quokka

  • @awenn2015
    @awenn2015 ปีที่แล้ว

    Вообще странно конечно что в js все присваивания по ссылке идут, этот процесс ведь никак не контролируется через всякие & верно?

    • @mishanep
      @mishanep  ปีที่แล้ว

      Что вы имеете в виду под всякими & ?

    • @awenn2015
      @awenn2015 ปีที่แล้ว

      @@mishanep во многих яп это символ передачи переменной по ссылке, например в том же php, если тебе нужно работать с переменной например в функции то можно ее передать по ссылке, иначе она просто копируется в новый участок памяти

    • @mishanep
      @mishanep  ปีที่แล้ว

      @@awenn2015 нет, такой штуки в JS нет.

    • @awenn2015
      @awenn2015 ปีที่แล้ว

      @@mishanep ну js это js у него много таких приколюх, даже то что в нем все объекты, что функции что массивы )

  • @alexalekseichuk5737
    @alexalekseichuk5737 ปีที่แล้ว

    Misha, Object.create() sozdaet novyi object, no ne kopiruet, a usaet argument kak prototype. assign i spread-operator kopiruiyt. tak?
    A to ty govorish, sho oni vse tri kopiruiyt.

    • @mishanep
      @mishanep  ปีที่แล้ว

      Формально копирование - это и есть создание чего-то нового на основе чего-то ранее существовавшего. И так оно во всех случаях.

  • @paulos_swim
    @paulos_swim ปีที่แล้ว

    Ну в общем, метод для полного копирования объекта в js всё ещё не подвезли.

  • @asmal832-hi
    @asmal832-hi 2 หลายเดือนก่อน

    Забыли сказать, что метод, который клонирует все - очень медленный.

  • @romanmed9035
    @romanmed9035 ปีที่แล้ว

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

  • @andrew2340
    @andrew2340 6 หลายเดือนก่อน

    th-cam.com/video/LEGg1F9yErI/w-d-xo.html - так копирование или глубокое копирование или и то и другое. вы уж определитесь

  • @stasostrin47
    @stasostrin47 ปีที่แล้ว

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

  • @demimurych1
    @demimurych1 ปีที่แล้ว

    Если Вы претендуете на то, чтобы учить чему-то других людей, то в рамках заявленной задачи в условиях языка JavaScript первое о чем следовало бы сказать, так это о том, что если Вам понадобилось глубокое копирование обьектка, то это означает что Вы делаете что-то не так. То есть задача с которой Вы работаете решается иным образом.
    Бывают исключения, которые касаются системного программирования. Но там, работают со структурами, которые лежат не в Object а в Typed Array где есть соотвествующие методы копирования.
    Решитесь взять на себя ответственность, за то чему Вы учите других.
    Тогда и Вы станете как специалист лучше, и Вам не будет стыдно за тех которых Вы чему то учили

  • @victormog
    @victormog ปีที่แล้ว +2

    В корне не правильное сравнение объекта и класса - они похожи только синтаксисом.
    Класс же по сути (в JS) - функция

    • @mishanep
      @mishanep  ปีที่แล้ว +4

      Я не знаю где вы увидели сравнение объекта и класса. Речь шла о копировании объектов. Инстанс класса - есть объект.

    • @victormog
      @victormog ปีที่แล้ว +4

      @@mishanep
      По большому счёту, в JS всё объекты...

    • @ulietaight
      @ulietaight ปีที่แล้ว +2

      @@victormog чушь несёшь

    • @victormog
      @victormog ปีที่แล้ว +1

      @@ulietaight это лучше, чем в чатах срать...

  • @lesters
    @lesters ปีที่แล้ว

    я так понимаю полноценного варианта скопировать не существует, все какие то на костылях?