Sto cercando di ereditare le proprietà da un genitore, ma non sono chiaro sul modo corretto di farlo.Ereditarietà del prototipo in JS e come ottenere le proprietà principali
Diciamo che ho:
var Animal = function(name){
this.offspring = [];
this.name = name;
return this;
}
Animal.prototype.createOffspring = function(name){
name = name || 'Baby '+(this.offspring.length+1);
this.offspring.push(name);
return this;
}
Ora voglio aggiungere un sub prototipo di ereditare in modo da non dover aggiungere manualmente tutto dal genitore. Ad esempio, consente di dire che voglio aggiungere una base Cat
da Animal
mi piacerebbe fare questo, come se fosse un Animal
var pet = new Cat('Kitty');
pet.createOffspring();
Senza dover manualmente per aggiungere name
e createOffspring
al Gatto constructor
che è in realtà solo un Animal
, ma con alcune altre funzionalità aggiuntive (come .meow()
o qualcosa del genere).
Ho bisogno di testarlo, ma mi piacerebbe _non_ dover ripetere 'this.name' perché _all_ gli animali avranno un nome quindi,' this.name = 'Un gatto'; 'dovrebbe essere in grado di essere rimosso e 'cat.name' dovrebbe restituire' An animal' –
Oh, mi dispiace. Ti ho fuorviato alla risposta sbagliata: Animal.prototype non era impostato, quindi 'cat.name' avrebbe dato un'eccezione. Il modo giusto, quando l'istanza è costruita dinamicamente, è di assegnare un oggetto ad un proto: 'Cat.prototype = Object.create (new Animal())' –
Questo mi ha portato nella giusta direzione e grazie mille. Scusa ci è voluto così tanto :) Le uniche cose che sembrano essere strane sono che 'Cat.prototype.constructor = Cat;' nel codice o non funziona nello stesso modo e ottengo ancora 'true' su' instanceof' S. Anche la riga 'Object.create()' rende 'cat.name' undefined. http://jsbin.com/uhogig/edit#javascript,html –