K původní otázce:
1. Není zřejmé, proč modelujete objekt tak, jak to děláte, co s ním dělat budete, účel.
2. V objektu se mísí 2 entity - role stopaře (cestování + místo) a entita osoby (představování + jméno).
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ží.
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.
5. V HikerFactory máte "let state = {name, place}", to vytvoří pole (když se to rovnou nevysere), ne objekt, takže assign asi nezafunguje.
6. Chcete-li zatřídit objekt jako stopaře, je to možno udělat několika způsoby (do tříd v JS nejdu) - buďto oným prototypem reprezentujícím obecného stopaře (obdoba funkcionality a zařazení sdíleného třídou), nebo příznakem, ale pokud možno unikátním, třeba objektem nebo symbolem (jestli to JS má), ne nějakým řetězcem, ale nejčistší je (jak píše Kit) využít rovnou polymorfismu užitím správně pojmenované metody, která něco dělá, ne se nejdříve optat, zda je to Stopař a pak na něm podle toho spustit metodu.