C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



JavaScript / Objektorientiert programmieren mit JavaScript / Vererbung, Polymorphie

Vererbung, Polymorphie

Vererbung, Polymorphie

➪ So lässt sich der Typ "Fahrzeug" mit den Properties "fahren" und "ausgabe" definieren. In den "erbenden" Typen "Fahrzeug.Auto" und "Fahrzeug.Boot" wird "fahren" überschrieben, "ausgabe" aber beibehalten. Nun wird für jeden Typ eine eigene Instanz erzeugt, die jeweils beide Properties aufruft. Während "ausgabe" für jedes Objekt unverändert bleibt, wird "fahren" polymorph aufgerufen, abhängig von der typabhängigen Implementierung.


var Fahrzeug = new Function("this.fahren = function () { " +
    "return \"Jedes Fahrzeug faehrt\"; }; " +
    "this.ausgabe = function () { return \"Ich bin ein Fahrzeug\"; }; ");
Fahrzeug.Auto = function () { };
Fahrzeug.Auto.prototype = new Fahrzeug();
Fahrzeug.Auto.prototype.fahren = function () { 
  return "Ich bin ein Automobil und fahre auf der Strasse"; 
};
Fahrzeug.Boot = function () { };
Fahrzeug.Boot.prototype = new Fahrzeug();
Fahrzeug.Boot.prototype.fahren = function () { 
  return "Ich bin ein Boot und fahre auf dem Wasser"; 
};
Fahrzeug.Ballon = function () { };
Fahrzeug.Ballon.prototype = new Fahrzeug();
Fahrzeug.Ballon.prototype.fahren = function () { 
  return "Ich bin ein Ballon und fahre in der Luft"; 
};
var f = new Fahrzeug();
var a = new Fahrzeug.Auto();
var b = new Fahrzeug.Boot();
var c = new Fahrzeug.Ballon();
console.log(f.ausgabe() + "; " + f.fahren());
console.log(a.ausgabe() + "; " + a.fahren());
console.log(b.ausgabe() + "; " + b.fahren());
console.log(c.ausgabe() + "; " + c.fahren());
console.log("b ist vom Typ            : " + typeof(b));
console.log("b ist ein Object         : " + (b instanceof Object));
console.log("b ist ein Fahrzeug       : " + (b instanceof Fahrzeug));
console.log("b ist ein Fahrzeug.Boot  : " + (b instanceof Fahrzeug.Boot));
console.log("b ist ein Fahrzeug.Auto  : " + (b instanceof Fahrzeug.Auto));
console.log("b ist ein Fahrzeug.Ballon: " + (b instanceof Fahrzeug.Ballon));

Das Ergebnis:


Ich bin ein Fahrzeug; Jedes Fahrzeug faehrt
Ich bin ein Fahrzeug; Ich bin ein Automobil und fahre auf der Strasse
Ich bin ein Fahrzeug; Ich bin ein Boot und fahre auf dem Wasser
Ich bin ein Fahrzeug; Ich bin ein Ballon und fahre in der Luft
b ist vom Typ            : object
b ist ein Object         : true
b ist ein Fahrzeug       : true
b ist ein Fahrzeug.Boot  : true
b ist ein Fahrzeug.Auto  : false
b ist ein Fahrzeug.Ballon: false

Interessant ist auch der Aufruf von "instanceof": ein als Fahrzeug.Boot deklariertes Objekt bbb wird zur Laufzeit sowohl als Object, als Fahrzeug sowie als Fahrzeug.Boot erkannt - nicht jedoch als "Boot", und selbstredend auch nicht als "Fahrzeug.Auto.". Dagegen gibt "typeof(bbb)" lediglich "object" zurück.

Dieser Ansatz erlaubt, selbst definierte Typen in Kategorien zusammenzufassen, die fachlich und sachlich zusammen gehören. Wenn die objektorientierte Programmierung in JavaScript - wie erwartet - weitere zunehmende Bedeutung erlangt, scheint eine bessere Strukturierung der Codes im Sinn der Java-Packages, der Namespaces unter .NET bzw. XML sehr empfehlenswert.

wg / 6. September 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/javascript4.html