L'ereditarietà, il polimorfismo e l'incapsulamento sono le tre caratteristiche più distinte e importanti dell'OOP, e da queste l'ereditarietà ha una statistica di utilizzo elevata al giorno d'oggi. Sto imparando JavaScript, e qui, tutti dicono che ha un'eredità prototipale, e la gente dappertutto dice che è qualcosa di molto diverso dall'ereditarietà classica.
Tuttavia, non riesco a capire qual è la loro differenza dal punto di utilizzo pratico? In altre parole, quando definite una classe base (prototipo) e ne derivate alcune sottoclassi, avete entrambi accesso ai funzionali della vostra classe base, e potete aumentare le funzioni sulle classi derivate. Se consideriamo quello che ho detto essere il risultato voluto dell'ereditarietà, allora perché dovremmo preoccuparci se usiamo la versione prototipale o classica?
Per chiarirmi di più, non vedo alcuna differenza nell'utilità e negli schemi di utilizzo dell'ereditarietà prototipale e classica. Questo mi porta a non avere interesse a capire perché sono diversi, dato che entrambi producono la stessa cosa, OOAD. Quanto praticamente (non teoricamente) l'eredità prototipale è diversa dall'ereditarietà classica?