Size: a a a

2021 June 10

LI

Lorem Ipsum in javascript_ru
Тем что короче
источник

К

Константин in javascript_ru
Но реализация конечно там веселая
источник

К

Константин in javascript_ru
Они не равноценные
источник

В

Владислав in javascript_ru
Object.assign — это функция, которая модифицирует и возвращает целевой объект?
источник

AF

Alexey Fedotov in javascript_ru
Вполне можно. Не используйте геттеры.
источник

К

Константин in javascript_ru
Да
источник

К

Константин in javascript_ru
источник

AF

Alexey Fedotov in javascript_ru
Я советую гуглить по именам правил для линтера. Они все оформлены как "пакеты", у всех в документации рационализация, т.е. причины, по которым такое правило вообще существует. У префер-обжект-спреда такое:

"Introduced in ES2018, object spread is a declarative alternative which may perform better than the more dynamic, imperative Object.assign."

"Введённый в ЕС2018, обжект спред является декларативной альтернативой, которая может отрабатывать быстрее, чем более динамический, императивный Обжект.ассигн"
источник

AF

Alexey Fedotov in javascript_ru
Т.е. код становится короче и чище, что хорошо, становится более декларативным (т.е. говорит, что сделать, а не как сделать; что хорошо) и делает работу с данными более иммутабельной (т.е. с созданием новых копий данных вместо изменения существующих; что хорошо, т.к. мутации данных приводят к целому классу сложноотлаживаемых багов)
источник

AF

Alexey Fedotov in javascript_ru
(Хотя, конечно, байтодрочеров от такого кощунства может и удар хватить)
источник

К

Константин in javascript_ru
И отхватввает
источник

К

Константин in javascript_ru
У нас запрещён
источник

К

Константин in javascript_ru
И асигн тоже правда :))
источник

w

whyamsx in javascript_ru
Есть client.onmessage внутри которого постоянно прилетает data с сервера, по вебсокету
Прилетает обычно что-то по типу { type: string }
В данный момент, у меня структура такая: онмеседж это функция, которая на каждое сообщение вызывается и как параметр принимает все те сообщения от сервера, и внутри неё много if'ов, которые выполняют разные действия зависимо от typ'а в прилетевших данных

Как можно убрать все эти if'ы и вынести каждый из них в отдельный модуль (вообще в отдельный файл, чтобы вместо всех тех условий вся логика ифов была разбито по разным файлам)
Надеюсь понятно описал...

Интересно какие варианты решения сможете предложить

У меня пока только один: написать один класс, который будет принимать как параметр каждое сообщение от сервера и передавать всем своим наследникам, а наследники уже будут обрабатывать.. просто раскинуть их по разным файлам и всё
Но это я на ходу придумал, возможно это не лучшее решение и есть какие-то паттерны, которые вы практикуете в подобных ситуациях, поделитесь пожалуйста своим мнением по этому поводу
источник

К

Константин in javascript_ru
Сделать типа патерн матчинга на обектах
источник

К

Константин in javascript_ru
Будет дикт, в который регистрируются обработчики
источник

К

Константин in javascript_ru
И потом по:

handlers[message.type].process(message)

Обрабатывают
источник

К

Константин in javascript_ru
Ну с проверкой ошибок конечно типа:

onMessage(msg) {
    if(!(msg.type in handlers))
          throw 'Unhandled type:' + msg.type;

    handlers[msg.type].process(msg);

}
источник

К

Константин in javascript_ru
Ну или как миделвары
источник

К

Константин in javascript_ru
Перебирая все.
источник