questo è un estensione (scusate il gioco di parole) della soluzione di elclanrs per includere dettagli sui metodi di istanza, oltre ad adottare un approccio estensibile a tale aspetto della domanda; Riconosco pienamente che questo è stato realizzato grazie a "JavaScript: The Definitive Guide" di David Flanagan (parzialmente adattato per questo contesto). Si noti che questo è chiaramente più prolisso di altre soluzioni, ma probabilmente trarrebbe vantaggio a lungo termine.
Per prima cosa utilizzare la funzione di David semplice "estendere", che copia proprietà ad un oggetto specificato:
function extend(o,p) {
for (var prop in p) {
o[prop] = p[prop];
}
return o;
}
Poi abbiamo attuare il suo programma di utilità definizione di sottoclasse:
function defineSubclass(superclass, // Constructor of our superclass
constructor, // Constructor of our new subclass
methods, // Instance methods
statics) { // Class properties
// Set up the prototype object of the subclass
constructor.prototype = Object.create(superclass.prototype);
constructor.prototype.constructor = constructor;
if (methods) extend(constructor.prototype, methods);
if (statics) extend(constructor, statics);
return constructor;
}
Per l'ultima po 'di preparazione miglioriamo il nostro prototipo Function con il nuovo jiggery-pokery di David:
Function.prototype.extend = function(constructor, methods, statics) {
return defineSubclass(this, constructor, methods, statics);
};
Dopo aver definito la nostra classe mostro, facciamo la seguente (che è riutilizzabile per eventuali nuove Classi vogliamo estendere/ereditare):
var Monkey = Monster.extend(
// constructor
function Monkey() {
this.bananaCount = 5;
Monster.apply(this, arguments); // Superclass()
},
// methods added to prototype
eatBanana: function() {
this.bananaCount--;
this.health++;
this.growl();
}
);
Eventuali duplicati di [? Come ereditare da una classe in javascript] (http://stackoverflow.com/ domande/2107556/how-to-inherit-from-a-class-in-javascript) –