У меня так тоже было, когда нужно было на проекте забрать кастомные скроллы, и видео Михаила вышло на эту тему чуть ли не в тотрже день (видео про либу overlayScrollbars)
Считаю, что нужно осторожно использовать этот метод, поскольку он поддерживается довольно свежими версиями браузеров. Если есть понимание, что этот продукт будут использовать более старые версии, то может быть проблемой
Михаил, вы упомянули про деструктуризацию и спред оператор для копирования , но она пригодна и для глубокого копирования со вложенностями. Раскройте эту тему тоже.
Спасибо за ролик. Вопрос, почему все так пытаются избегать _. говоря - не тянуть же библиотеку ради одной функции, но на реальном проекте, скорее всего будет потребность не в одной, а в нескольких функциях из _. Может тогда просто смириться с этим?
Здесь возможны разные сценарии. Я работал и на проектах с lodash, и без него, но с Ramda, и без библиотек хэлперов вовсе. Lodash был мегаактуален, когда нативными средствами языка было сложнее что-то сделать. С развитием языка актуальность внешней библиотеки снижается. Это как с jQuery. Лично мне больше нравится Ramda за ее функциональный подход. Она, помимо функционала, делает читабельность кода совсем иной. А если мне нужен просто вызов функции с присвоением результата в переменную и я могу обойтись без библиотеки, то скорее всего я так и сделаю.
Ну, окей! А в каких случаях требуется копирование экземпляра? Чтобы так пыжить...? Вот, там была шняга с блобом и чем-то... Нафига ее копировать? Может по старинке - вспомнить про конструктор? Я на с# пишу.. там рефлекшен есть :) а это, прям извращения над функцией...
Подскажите, пожалуйста, если копия на методы не распространяется то повлияет вызов метода у копии на оригинальный обьект? Если да то можно ли избежать этого?
Копия на методы не распространяется - обычно обозначается, что у копии не будет методов как таковых. Разве что стандартные методы объекта, но без тех, что могли быть добавлены оригиналу.
Extends это уже про наследование в классах. Это немного о другом, но да - таким образом методы родительского класса, равно как геттеры/сеттеры, будет наследоваться.
@@mishanep во многих яп это символ передачи переменной по ссылке, например в том же php, если тебе нужно работать с переменной например в функции то можно ее передать по ссылке, иначе она просто копируется в новый участок памяти
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.
JS доступен не только в браузерах. Плюс для браузеров существуют полифиллы. Я считаю, что неплохо как минимум узнавать про новые возможности, даже если мы не можем начать их использовать в своих проектах с сегодняшнего дня.
Есть функция, которая создаёт новый объект из существующего. Если у существующего большой уровень вложенности, то этот приведёт к проблемам. Т. к. все изменения в существующем объекте будут происходить и в новом.
А кто нибудь пробовал написать функцию которая копировалабы обьект на любую вложенность с учетом геттеров, сеттеров, символьных полей, скрытых дескриптором полей, копировала методы, и сохранялабы прототипы для всех внутренних копируемых обьектов ? Ну тоесть чтобы прямо вообще делала полную копию.
все оно не так глубоко и правильно копирует. мне это практически рабочего места стоило. structuredClone так же не идеальный, как показал автор видео. лодаш в помощь.. странно что нет реально полноценного встроенного механизма.
Есть полезное, а есть и из разряда - мы не сможем какать через рот, потому что рот не предназначен для того что бы какать... Если надо клонировать класс - у класса должен быть такой метод
Если Вы претендуете на то, чтобы учить чему-то других людей, то в рамках заявленной задачи в условиях языка JavaScript первое о чем следовало бы сказать, так это о том, что если Вам понадобилось глубокое копирование обьектка, то это означает что Вы делаете что-то не так. То есть задача с которой Вы работаете решается иным образом. Бывают исключения, которые касаются системного программирования. Но там, работают со структурами, которые лежат не в Object а в Typed Array где есть соотвествующие методы копирования. Решитесь взять на себя ответственность, за то чему Вы учите других. Тогда и Вы станете как специалист лучше, и Вам не будет стыдно за тех которых Вы чему то учили
Михаил, спасибо. Адекватно, просто, информативно. И так по всему вашему контенту. 🤘
Здорово! Не знал про этот метод! Спасибо!
😀
Как обычно , круто и полезно! Спасибо, надо ещё!
Очень полезно, новый метод клонирования, просто агонь))
Как всегда коротко и полезно, спасибо)
Не знал об этом! Спасибо! 🔥🔥🔥🔥
спасибо за видео! очень полезно, как всегда. И своевременно, тоже как всегда )
Большое спасибо. Как всегда интересно 🙂
Михаил, спасибо за такое познавательное видео !
Большое спасибо за видео. Было очень полезно!
Михаил просто чудотворец. Только вчера учил клонирование и не хватало дип клона и тут хоба
У меня так тоже было, когда нужно было на проекте забрать кастомные скроллы, и видео Михаила вышло на эту тему чуть ли не в тотрже день (видео про либу overlayScrollbars)
Спасибо за видео!
Комментарий в поддержу👍
Круто!
Спасибо большое!
Балдежное видео, полезное
Считаю, что нужно осторожно использовать этот метод, поскольку он поддерживается довольно свежими версиями браузеров. Если есть понимание, что этот продукт будут использовать более старые версии, то может быть проблемой
Думаю полифил из того же lodash уже есть)
не знал, благодарю!
Очень полезное видео, спасибо! Интересно, почему во всех мануалах в сети приводятся методы с ..., JSON или object.assign, но не этот
Это достаточно новый метод в js.
Написать рекурсивную функцию глубокого копирования объектов -- и будет вам счастье)) Михаил, спасибо за видео!
В целом понятно, что Lodash - наше всё :D
Либа отменная
Не ставь лодаш полностью. А ставь конкретно утилиту
Вроде как если исходный объект содержит циклические ссылки, то могут быть ошибки при использовании данного метода
Михаил, а что за ИДЕ и используете в видео? интересует как логи видно сразу сбоку без браузера консоли. это расширение в иде?
Quokka расширение для vs code
Думаю это quokka c подпиской
Это Quokka без всяких подписок =)
спасибо!
большое спасибо за видео!
было очень полезно!
Круто! А как называется расширение, которое выводит логи прямо в редакторе?
quokka
респект
Подскажи, пожалуйста, что за расширение ты используешь не вызывая терминал, а видя результат вывода в консоль по правую сторону. Заранее благодарю)
возможно quokka
Это Quokka. У нее есть ограничения в бесплатной версии, но в моем случае ее хватило.
Михаил, вы упомянули про деструктуризацию и спред оператор для копирования , но она пригодна и для глубокого копирования со вложенностями. Раскройте эту тему тоже.
Михаил, большое спасибо за информацию. А есть ли встроенная функция у JS для глубокого сравнения объектов?
Не встречал.
thx!!!
Спасибо за ролик. Вопрос, почему все так пытаются избегать _. говоря - не тянуть же библиотеку ради одной функции, но на реальном проекте, скорее всего будет потребность не в одной, а в нескольких функциях из _. Может тогда просто смириться с этим?
Здесь возможны разные сценарии. Я работал и на проектах с lodash, и без него, но с Ramda, и без библиотек хэлперов вовсе. Lodash был мегаактуален, когда нативными средствами языка было сложнее что-то сделать. С развитием языка актуальность внешней библиотеки снижается. Это как с jQuery.
Лично мне больше нравится Ramda за ее функциональный подход. Она, помимо функционала, делает читабельность кода совсем иной. А если мне нужен просто вызов функции с присвоением результата в переменную и я могу обойтись без библиотеки, то скорее всего я так и сделаю.
почему бы и нет, весь лодаш не пойдет в бандл
Ну у нас на проекте отдельно установлен только isEqual из лодаша, потому что только им пользуемся
Или просто установить через npm i lodash.clonedeep, и тогда вся библиотека и не потянется)
deepmerge из npm берём и будет сказка)
Михаил, подскажите, как называется плагин, который сразу подсказывает что выведет ответ? Впервые увидела на видео, тоже хочу 😊
Это quokka
Крепко обрейтузился
Может быть видео про immer js?
Михаил, вопрос не по теме: знакомы ли Вы с Flutter? Очень надеюсь что да... ☺
Здравствуйте, Владимир. Никогда с ним не работал =)
Что за плагин в vscode использовался для отображения результата?
❤🔥
Ну, окей! А в каких случаях требуется копирование экземпляра? Чтобы так пыжить...? Вот, там была шняга с блобом и чем-то... Нафига ее копировать? Может по старинке - вспомнить про конструктор? Я на с# пишу.. там рефлекшен есть :) а это, прям извращения над функцией...
StructuredClone некоторыми браузерами не поддерживается. И как мне тогда глубоко копировать, и не применять при этом сторонние библиотеки?
Подскажите, пожалуйста, если копия на методы не распространяется то повлияет вызов метода у копии на оригинальный обьект? Если да то можно ли избежать этого?
Копия на методы не распространяется - обычно обозначается, что у копии не будет методов как таковых. Разве что стандартные методы объекта, но без тех, что могли быть добавлены оригиналу.
@@mishanep Спасибо
Как называется расширение, чтоб консоль лог результат в редакторе выводил?)
quokka
А как тогда скопировать гетеры, методы и т.д.? Просто johnClone extends john?
Extends это уже про наследование в классах. Это немного о другом, но да - таким образом методы родительского класса, равно как геттеры/сеттеры, будет наследоваться.
спасибо!
Вообще странно конечно что в js все присваивания по ссылке идут, этот процесс ведь никак не контролируется через всякие & верно?
Что вы имеете в виду под всякими & ?
@@mishanep во многих яп это символ передачи переменной по ссылке, например в том же php, если тебе нужно работать с переменной например в функции то можно ее передать по ссылке, иначе она просто копируется в новый участок памяти
@@awenn2015 нет, такой штуки в JS нет.
@@mishanep ну js это js у него много таких приколюх, даже то что в нем все объекты, что функции что массивы )
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.
Формально копирование - это и есть создание чего-то нового на основе чего-то ранее существовавшего. И так оно во всех случаях.
structuredClone безусловно крутой метод, но у него пока что очень плохая поддержка браузерами? Только относительно самые свежие. Разве не так?
JS доступен не только в браузерах. Плюс для браузеров существуют полифиллы.
Я считаю, что неплохо как минимум узнавать про новые возможности, даже если мы не можем начать их использовать в своих проектах с сегодняшнего дня.
@@mishanep Безусловно. Спасибо за ответ!
Good
Можно реальный пример на практике, когда нам пригодиться клонировать объект, теория хорошо, но мне интересно, где это вообще применяется в практике?
у тебя есть большая форма, для нее можно создать 2 переменные, одна будет для заполнения этой формы, вторая пустая, для последующей очистки формы
Есть функция, которая создаёт новый объект из существующего. Если у существующего большой уровень вложенности, то этот приведёт к проблемам. Т. к. все изменения в существующем объекте будут происходить и в новом.
А что за плагин показывает результат console log без запуска кода на выполнение? Как это вообще работает без запуска кода?
Полистал внизу. Михаил, вам стоит снять про quokka ролик :)
А как это консоль выводится прямо в коде?
автор в паре комментов ответил - quokka
это не JS метод, а метод в браузере или другом окружении, в частности описан в спецификации HTML
все хорошо, но звук как из трубы
А кто нибудь пробовал написать функцию которая копировалабы обьект на любую вложенность с учетом геттеров, сеттеров, символьных полей, скрытых дескриптором полей, копировала методы, и сохранялабы прототипы для всех внутренних копируемых обьектов ? Ну тоесть чтобы прямо вообще делала полную копию.
Если такое будет нужно то прийдёться писать,а так ни разу не пригождалось,так то это не очень сложно.
+
все оно не так глубоко и правильно копирует. мне это практически рабочего места стоило. structuredClone так же не идеальный, как показал автор видео. лодаш в помощь.. странно что нет реально полноценного встроенного механизма.
Забыли сказать, что метод, который клонирует все - очень медленный.
Ну в общем, метод для полного копирования объекта в js всё ещё не подвезли.
Есть полезное, а есть и из разряда - мы не сможем какать через рот, потому что рот не предназначен для того что бы какать... Если надо клонировать класс - у класса должен быть такой метод
th-cam.com/video/LEGg1F9yErI/w-d-xo.html - так копирование или глубокое копирование или и то и другое. вы уж определитесь
Если Вы претендуете на то, чтобы учить чему-то других людей, то в рамках заявленной задачи в условиях языка JavaScript первое о чем следовало бы сказать, так это о том, что если Вам понадобилось глубокое копирование обьектка, то это означает что Вы делаете что-то не так. То есть задача с которой Вы работаете решается иным образом.
Бывают исключения, которые касаются системного программирования. Но там, работают со структурами, которые лежат не в Object а в Typed Array где есть соотвествующие методы копирования.
Решитесь взять на себя ответственность, за то чему Вы учите других.
Тогда и Вы станете как специалист лучше, и Вам не будет стыдно за тех которых Вы чему то учили
В корне не правильное сравнение объекта и класса - они похожи только синтаксисом.
Класс же по сути (в JS) - функция
Я не знаю где вы увидели сравнение объекта и класса. Речь шла о копировании объектов. Инстанс класса - есть объект.
@@mishanep
По большому счёту, в JS всё объекты...
@@victormog чушь несёшь
@@ulietaight это лучше, чем в чатах срать...
я так понимаю полноценного варианта скопировать не существует, все какие то на костылях?