Inheritance / Vererbung
Vererbung in JavaScript wird über die Prototype-Chain abgebildet. Um einen Unterklassen-Objekt zu erzeugen, muss folgendes gewährleistet sein:
- Erben der Instanz-Properties der Basis-Klasse
- Definition eigener Properties
- Erben der Methoden der Basis-Klasse
- Definition eigener Methoden (eventuell Überschreibungen)
js
// Basis-Klasse
function Konto(nr) {
this.nr = nr;
this.stand = 0;
}
Konto.prototype.einzahlen = function (betrag) { this.stand += betrag; };
Konto.prototype.auszahlen = function (betrag) {
if (betrag > this.stand) {
return false;
}
this.stand -= betrag;
return true;
};
// Sub-Klasse
function GiroKonto(nr) {
// 1. Erben der Instanz-Properties der Basis-Klasse
Konto.call(this, nr);
// 2. Definition eigener Properties
this.dispo = 1000;
}
// 3. Erben der Methoden der Basis-Klasse
GiroKonto.prototype = Object.create(Konto.prototype, {
'constructor': { value: GiroKonto }
});
// 4. Definition eigener Methoden (eventuell Überschreibungen)
GiroKonto.prototype.auszahlen = function (betrag) {
if (betrag > this.stand + this.dispo) {
return false;
}
this.stand -= betrag;
return true;
}
GiroKonto.prototype.einzahlen = function (betrag) {
Konto.prototype.einzahlen.call(this, betrag);
}
const gk = new GiroKonto(1003);
gk.einzahlen(500);
gk.auszahlen(800);
console.log(gk.stand); // -300
console.log(gk instanceof Konto); // true// Basis-Klasse
function Konto(nr) {
this.nr = nr;
this.stand = 0;
}
Konto.prototype.einzahlen = function (betrag) { this.stand += betrag; };
Konto.prototype.auszahlen = function (betrag) {
if (betrag > this.stand) {
return false;
}
this.stand -= betrag;
return true;
};
// Sub-Klasse
function GiroKonto(nr) {
// 1. Erben der Instanz-Properties der Basis-Klasse
Konto.call(this, nr);
// 2. Definition eigener Properties
this.dispo = 1000;
}
// 3. Erben der Methoden der Basis-Klasse
GiroKonto.prototype = Object.create(Konto.prototype, {
'constructor': { value: GiroKonto }
});
// 4. Definition eigener Methoden (eventuell Überschreibungen)
GiroKonto.prototype.auszahlen = function (betrag) {
if (betrag > this.stand + this.dispo) {
return false;
}
this.stand -= betrag;
return true;
}
GiroKonto.prototype.einzahlen = function (betrag) {
Konto.prototype.einzahlen.call(this, betrag);
}
const gk = new GiroKonto(1003);
gk.einzahlen(500);
gk.auszahlen(800);
console.log(gk.stand); // -300
console.log(gk instanceof Konto); // true
JavaScript Docs