Diciamo che ho oggetto Player:JS Prototypal Inheritance: i child utilizzano le stesse proprietà genitore?
var player = function(name) {
this.handlers = {};
}
player.prototype.on = function(event, callback) {
if (!this.handlers[event]) {
this.handlers[event] = [];
}
this.handlers[event].push(callback);
}
Funziona benissimo, posso creare giocatori e ognuno avrà il proprio insieme di gestori. Ora supponiamo ho bisogno di ereditare da player
:
var testPlayer = function(name) {
this.name = name;
};
testPlayer.prototype = new player();
Ora, quando creo testPlayer
's, ognuno dei quali condividono la stessa handlers
proprietà:
var adam = new testPlayer('Adam');
adam.on('test', function(){});
var eve = new testPlayer('Eve');
// eve.handlers == {'test':<function>}
Che cosa mi manca qui? Capisco che ogni prototipo dello testPlayer
è lo stesso oggetto new player
che creo quando descrivo la classe figlio. Ma c'è un modo per tutti i giocatori di prova di avere il proprio set di gestori?
+1 per la "un'altra soluzione", questo sembra il più utilizzabile. –
Sono d'accordo, questo è un paradigma di programmazione totalmente valido. La parte fastidiosa è che devi aggiungere un controllo di questo tipo in ogni metodo che usa i 'gestori'. – MaxArt
Si potrebbe avere un singolo metodo 'init' chiamato dal costruttore e farlo da lì. Si noti che questo è solo un problema se si modificano le proprietà di un oggetto (o array) sul prototipo. Se si tenta di assegnare alle proprietà che vivono sul prototipo, verrà creata automaticamente una proprietà di shadowing locale (non è possibile assegnare le proprietà di prototipo alle istanze). – bfavaretto