Ti stai accanendo inutilmente, mischi cose che non centrano niente.
Javascript è un linguaggio diverso da Java, nessuno ha mai detto che l'ereditarietà e simile.
javascript ha una "ereditarietà" finta, simulata, o quello che vuoi.
Qui invece hai fatto una buona deduzione
Usare call/apply non è come una vera e propria ereditarietà, al limite è una ereditarietà simulata,
non a caso ciò che fanno è utilizzare una funzione come fosse un metodo dell'oggetto che passi.

E' un pò macchinoso tale sistema ma funziona abbastanza bene