Skip to content

Inheritance / Vererbung

Vererbung in JavaScript wird über die Prototype-Chain abgebildet. Um einen Unterklassen-Objekt zu erzeugen, muss folgendes gewährleistet sein:

  1. Erben der Instanz-Properties der Basis-Klasse
  2. Definition eigener Properties
  3. Erben der Methoden der Basis-Klasse
  4. 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