Nel capitolo di JavaScript professionale per sviluppatori Web su OOP, Nicholas Zachas descrive un modello di ereditarietà JavaScript che si riferisce a eredità di combinazione . L'idea di base è che i metodi siano ereditati tramite concatenamento di prototipi; mentre le proprietà dei genitori vengono passate ai discendenti chiamando il costruttore genitore all'interno del costruttore figlio.
Un piccolo esempio:
function Parent() {
this.parentProperty;
}
Parent.prototype.parentMethod = function() {
console.info(parentProperty);
}
function Child() {
Parent();
}
Child.prototype = new Parent();
Conclude la sua discussione dicendo che "l'ereditarietà delle combinazioni è il modello di ereditarietà più utilizzato in JavaScript."
Tuttavia, nella sua successiva discussione sul modello di ereditarietà prototipale, egli menziona una mancanza dell'ereditarietà di combinazione, cioè che il tipo di figlio richiama il costruttore genitore due volte: una volta durante la creazione del prototipo e poi di nuovo nel costruttore.
La mia domanda è: perché il modello di ereditarietà delle combinazioni suggerisce di estendere il prototipo facendo in modo che il prototipo del bambino sia una istanza del tipo genitore, perché non dovrebbe fare riferimento al prototipo del genitore direttamente? Utilizzando l'esempio precedente, perché non fare solo quanto segue:
Child.prototype = Parent.prototype;