jest to rozszerzenie (usprawiedliwienie kalamburu) rozwiązania elkanerów w celu uwzględnienia szczegółów na temat metod instancji, a także przyjęcie rozszerzalnego podejścia do tego aspektu pytania; W pełni zgadzam się, że jest to połączone dzięki "JavaScript: ostateczny przewodnik" Davida Flanagana (częściowo dostosowane do tego kontekstu). Należy zauważyć, że jest to wyraźnie bardziej szczegółowe niż inne rozwiązania, ale prawdopodobnie przyniesie korzyści w dłuższej perspektywie.
Najpierw używamy prostą funkcję Dawida „Rozszerz”, który kopiuje właściwości do określonego obiektu:
function extend(o,p) {
for (var prop in p) {
o[prop] = p[prop];
}
return o;
}
Następnie wdrożymy jego użyteczność definicji podklasy:
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;
}
dla ostatniego bitu przygotowania Udoskonalamy nasz prototyp Function z nowym jiggery-pokerem Davida:
Function.prototype.extend = function(constructor, methods, statics) {
return defineSubclass(this, constructor, methods, statics);
};
Po zdefiniowaniu naszą klasę potwór, mamy następujące (który jest ponownie wykorzystywane do wszelkich nowych klas chcemy przedłużyć/Dziedzicz):
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();
}
);
Możliwy duplikat [? Jak dziedziczą z klasy w javascript] (http://stackoverflow.com/ pytania/2107556/how-to-inherit-from-a-class-in-javascript) –