Thread Ein paar Programmiertricks (39 answers)
Opened by roooot at 2008-03-22 23:16

Struppi
 2008-03-26 10:40
#107492 #107492
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
KurtZ+2008-03-25 21:10:26--
Man kann die Konstruktorobjekte (also "Klassendefinitionen") von den zugehörigen Instanzobjekten auch gut unterscheiden, erstere haben ein Objektattribut "prototype" mit den "Klassenmethoden" und "Klassenattributen" letztere ein Refrenzattribut "__proto__" das auf den prototype des Konstruktors verweist.

Aber denk daran, nur Mozilla Browsern habe darauf der Zugriff (Mathias Ergänzung im selfhtml Forum)

[EDIT]hab dein letztes Posting nicht gelesen.

KurtZ+2008-03-25 21:10:26--
ein Klassenobjekt wird als Funktion deklariert und kann höchstens erben:
Code: (dl )
  Klasse1.prototype= new Klasse0(); 


das folgende erzeugt aber ne Fehlermeldung
Code: (dl )
  Unterinstanz=new Instanz(); // Fehler: Instanz is not a constructor 


Deine erste Erläuterung verstehe ich nicht. Da es keine Klassen gibt, gibt es auch kein Klassenobjekt, jede Funktion ist erstmal per se ein Konstruktor und du machst dort nominell nichts anderes als dem prototype von Klasse1 mit einer Instanz von Klasse0 zu überschreiben. Du erweiterst also Klasse1 um alle Attribute, die der Konstruktor Klasse0 erzeugt und dessen prototypen. Das war ja auch ursprünglich deine Frage, du kannst diesen Prototype jederzeit überschreiben.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
  function Klasse0() {this.name = 'Klasse 0';}
function Klasse1() {this.name = 'Klasse 1';}
function Klasse2() {}

Klasse2.prototype= new Klasse0();
var a = new Klasse2();
alert( a.name + '\n' + a.constructor);

Klasse2.prototype= new Klasse1();
var a = new Klasse2();
alert( a.name + '\n' + a.constructor);


Im zweiten Fall könnte man sich noch behelfen in dem man schreibt:

Code: (dl )
  var Unterinstanz=new Instanz.constructor(); 


KurtZ+2008-03-25 21:10:26--
Sicher Vererbung mit JS-Prototype bietet Möglichkeiten die einfacher Umzusetzen sind als mit Perl-ISA aber auch umgekehrt. Tatsächlich sind beide AFAIK viel flexibler als C++ oder JAVA was wiederum mehr Disziplin und modifizierte Design-Pattern erfordert.


Das sehe ich anders, Vererbung ist mit JS umständlich, einmal hast du keinen direkten Zugriff auf SUPER und zum zweiten wird durch new BasisKlasse() immer eine Instanz der Basis Klasse erzeugt, was zur Folge hat, das der Konstruktor aufgerufen wird und du dort aufpassen musst, wenn du eine für jede Instanz unterschiedliche Initialisierung machen willst, das geht in die Hose. Du musst entweder die Intialisierung in eine Funktion verlagern oder den Weg, den dir Don P im selfhtml Forum gezeigt hat wählen.

View full thread Ein paar Programmiertricks