peterS.: Vererbung

Beitrag lesen

gruss Axel,

das schoene an javascript ist, dass Du beim stricken von
   komplexen oo-anwendungen ohne einengendes klassen-korsett
   arbeiten darfst. oder anders: kein formalismus nimmt Dich
   an die hand, um Dir den weg aus dem vererbungs-labyrinth
   zu weisen.

Nein, es sei denn, Du meinst den letzten Satz sehr ironisch ;-)).

durchaus nicht.

OOP ohne Trennung von Class und Object, also von Beschreibung des
Objektes und reeller Objekt-Instanz im Arbeitsspeicher ist nicht
sinnvoll.

warum?

Prototyping ist für mich _keine_ OOP. Es werden einfach nur mehrere
Objekt-Instanzen erzeugt, die in Verbindung miteinander stehen.

das ist nur eine andere art der vererbung, deshalb aber noch lange
   nicht weniger oo.

Bei OOP kann aber eine Klasse eine andere erweitern _ohne_ dass ein
Objekt der Superklasse vorhanden ist, einfach indem sie die Klasse
beerbt. Instanziert wird nur ein Objekt.

hier haben wir die klassisch statische vererbung wo schon zur
   compile-zeit die klassenhierarchie fest (statisch eben) definiert
   wird.

Du siehst aber an den alerts, dass die Superklassen alle instanziert
werden. Alle werden Objekte im Arbeitsspeicher und bleiben dort, bis
molily stirbt ;-))(das Objekt molily).

die dynamischen vererbung baut darauf, dass objekthierarchien waehrend
   der laufzeit geschaffen und _veraendert_ werden koennen. dafuer sind
   prinzipbedingt nun mal objekte (mit Deinen worten bzw. in den termen
   "klassischer oo": instanzen der superklassen) die in ECMAScript dann
   (objekt-)prototypen sind erforderlich.

So bekommen es die JavaScript-Programmierer hin, dass ein Browser
das System mit 100% Prozessor- und 100% Speicherauslastung lahmlegt.

.. uuh .. boes' geflamt. fuer das menschlein, aber auch ohne ein
   einziges objekt vom typ "mensch" wird im beispiel gerade mal ein
   *overhaed* von drei objektprototypen (EchterMensch, Menschenaffe,
   Menschenartiger) erzeugt. bei den dreien bleibt es dann aber auch,
   bis der scripting host stirbt - interpretierte sprachen leben nun
   mal gerne in grosszuegigen raeumen. Aber selbst bei kompexeren
   anwendungen zwingst Du den browser nicht ueber vererbung in die knie.

vielen JavaScript-programmierern gelingt dies hingegen muehelos ueber
   DOM mit unreferenzierten "document.getElementById"-orgien.

das von Dir erweiterte bsp. liesse sich dank des prototypen-konzepts
   wiederum wie folgt vereinfachen:

var Menschenartiger = function (name) {
     alert("Menschenartiger");
     this.name = name;
   };
   Menschenartiger.prototype.setName = function (name) { // ein setter-prototyp genuegt;
     this.name = name;
     alert("prototypen methode: " + arguments.callee);
   };

var Menschenaffe = function (name) {
     this.constructor = arguments.callee; // ueberschreibt "Menschenartiger";
     alert("Menschenaffe");
     this.name = name;
   //durch den prototypen schon implementiert:
   //this.setName = function(name) { this.name = name; alert("Methode von Menschenaffe"); }
   };
   Menschenaffe.prototype = new Menschenartiger("Menschenaffe");

var EchterMensch = function (name) {
     this.constructor = arguments.callee; // ueberschreibt "Menschenaffe";
     alert("EchterMensch");
     this.name = name;
   //durch den prototypen schon implementiert:
   //this.setName = function(name) { this.name = name; alert("Methode von EchterMensch"); }
   };
   EchterMensch.prototype = new Menschenaffe("EchterMensch");

var Mensch = function (name) {
     this.constructor = arguments.callee; // ueberschreibt "EchterMensch";
     alert("Mensch");
     this.name = name;
   };
   Mensch.prototype = new EchterMensch("Mensch");

var molily = new Mensch("Mathias");
   alert("molily.name = " + molily.name);

molily.setName("Peter");
   alert("molily.name = " + molily.name);

viele Grüße

danke,

PS: Welche Quelle verwendest Du eigentlich jetzt als Spezifikation
für JavaScript http://devedge.netscape.com/central/javascript/
ist tot. Mit Google finde ich zwar einige. Die sehen aber alle wie
Sekundärquellen aus. http://synchro.net/docs/js/ref/contents.html,
http://www.byteshift.de/javascript-1415/CoreReferenceJS15/index.html

ich nehme sowohl die

deutsche ausgabe der 4. englischen auflage von David Flanagans
   Javascript-bibel "JavaScript. Das umfassende Referenzwerk."
   O'REILLY / Juni 2002 / ISBN: 3897213303

sowie das nach meinem geschmack gelungenere

"JavaScript Developer's Dictionary" von Alexander J. Vincent
   SAMS / Juni 2002 / English / ISBN: 0672322013

als auch die "ECMAScript Language Specification" (Standard ECMA-262) zur hand.

by(t)e by(t)e - peterS. - pseliger@gmx.net

--
"Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive." - Douglas Crockford