2. V objektu se mísí 2 entity - role stopaře (cestování + místo) a entita osoby (představování + jméno).
To je uplne v poriadku, vy myslite prilis objektovo a nie ucelovo. Vytvaram jediny objekt s jedinou rolou (ci entitou ked chcete). Vola sa introducer-traveler alebo kratsi alias hiker. Neexistuje entita osoby ani entita stopara. To su funkcionality. Kym si toto neuvedomite tak nepochopite zakladny rozdiel medzi composition a inheritance.
3. Pojmenování vstupu "state" nedává smysl, protože (stejně jako objekt) míchá "stav" stopaře a jeho jméno (což není stav), trvalo mi dlouho, než jsem vůbec zjistil, k čemu to slouží.
Opat ste zatazeny svojimi jednostrannymi navykmi. Naco by mi bol objekt bez stavu

V podsate by som ho mohol aj schovat
Object.assign(
{}, // state,
introducer(state),
traveler(state)
)
ale pocas vyvoja je dobre vidiet co drzi. State je proste mnozina properties, ktore mu tam prihodili jednotlive funkcionality, ktore obsahuje. To, ze ich ma dobredu vymenovane je len pre pripadne default hodnoty, moze byt aj prazdny.
4. Proč při odděleném vytvoření funkcionalit představovače a cestovatele je definujete jako pracující s bastlem state, který obsahuje i informaci, která s danou funkcionalitou nesouvisí? Tím oddělení funkcionalit ztrácí smysl.
Presne nechapem ako to myslite. Ved to su obycajne funkcie a tie same o sebe ziadne "ulozisko" nemaju. Preto dostavaju argument s referenciou na state s ktorym mozu pracovat - resp. si v nom najdu properties s ktorymi vedia pracovat.
V realnom projekte samozrejme mam nejaku stabnu kulturu a pouziva sa jasna konvencia namespace aby sa nahodou nebili.
5. V HikerFactory máte "let state = {name, place}", to vytvoří pole (když se to rovnou nevysere), ne objekt, takže assign asi nezafunguje.
WTF, takze ste nakoniec predsa len troll. Precitajte si nejaky "ES6 for dummies" a prestante rozpravat nezmysly. Vytvori sa objekt a priklad je plne funkcny.
6. Chcete-li zatřídit objekt jako stopaře, je to možno udělat několika způsoby
Ano spravil som to kompozitnym sposobom.
...využít rovnou polymorfismu užitím správně pojmenované metody
No go. OOP detected

Ziadne metody nebudu, zabudnite. Asi som tam tu class vobec nemal davat, lebo to OOPistov uplne zmiatlo

Este raz zopakujem, ze zatial som sa na to vykaslal a nechavam objekt anonymny bez akejkolvek identifikacie, ci cez type property alebo classy pre state. Proste mi to este netrebalo ho identifikovat, funguje to samo.