Dal OOPS base, ho sempre utilizzare l'ereditarietà come un potente strumento per il riutilizzo del codice,Perché Javascript non supporta l'ereditarietà per impostazione predefinita?
esempio, se scrivo un programma di scacchi in OOPS e quando implementare una relazione is-a
come,
Class Piece{
int teamColor;
bool isLive;
Positon pos;
int Points;
.......
int getTeamColor(){....}
.......
};
Class Rook extend Piece{ //`is-a`
...... // No getTeamColor() definition here.. because the parent has the definition.
};
Class Pawn extend Piece{ //`is-a`
......// No getTeamColor() definition here.. because the parent has the definition.
};
I potrebbe farlo con la relazione has-a
in javascript, ma lo svantaggio che sto vedendo è, Devo ridefinire ogni funzione anche nella classe derivata.
Esempio: ridefinizione della getTeamColor() di nuovo in ogni torre, cavallo, pedone, re .... ecc ..
var Pawn = function(teamColor,pos){
var piece = new Piece(teamColor,pos);
.......
this.getTeamColor = function(){
return piece.getTeamColor();
};
}
La mia domanda è, perché javascript doesnot supporta l'ereditarietà classica come opzione predefinita ?
Dai un'occhiata a jOOPL (http://joopl.codeplex.com). È una libreria orientata agli oggetti al 100% di JavaScript che incanala il linguaggio per supportare l'OOP basato sulla classe. Quindi ha ereditarietà e polimorfismo (e molte altre caratteristiche). Sto per rilasciare una nuova versione in pochi giorni con ulteriori miglioramenti. –
JavaScript supporta l'ereditarietà * se lo si utilizza *. Cerca "Catena prototipo JavaScript". Per quanto riguarda "Perché javascript non supporta l'ereditarietà classica come opzione predefinita?" - perché è così che è stato definito JavaScript. Perché Java non ha Tratti ma Scala? Perché Python supporta l'MI anche se Ruby no? Perché il C++ non ha Multiple Dispatch di Dylan? Perché Eiffel consente la rottura di LSP? Bene, sono * lingue diverse * e rivendicare che uno sia corretto - tramite mezzi indiretti di "classico" - è negare che un altro approccio sia (o più) valido. – user2246674
Articolo completo da Mozilla Developer Network sui dettagli del modello di oggetti javascript. [LINK QUI] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model). Questo articolo riguarda l'ereditarietà, la gerarchia e le relazioni mentre si effettua un confronto tra Java (basato su classi) e Javascript (basato su prototipo). –