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

KurtZ
 2008-03-25 22:10
#107485 #107485
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
HI Murphy,

hab mich jetzt tiefer in JS-prototyping praktisch eingearbeitet und mich auch belehren lassen und IMHO verwischen die Unterschiede immer mehr -> http://forum.de.selfhtml.org/?t=168754&m=1101416

Auch in den O'Reilly JS-Büchern in denen ich geschmökert habe ist von "Klassen" in Anführungsstrichen und mit Fussnote die Rede.

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.

Auch visuell kann man "Instanzobjekte" von "Klassenobjekten" unterscheiden, eine Instanz wird direkt konstruiert
Code: (dl )
  Instanz = new Klasse1(); 


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 


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.

Letztendlich braucht man aber immer (Denk)Muster und eine sprachliche Möglichkeiten diese abzubilden. Das Denken in Klassen ist eines dieser Muster. M.a.W man müsste es so genau Dokumentieren, dass man wiederum mit den üblichen Designpattern argumentieren würde, wie z.B. einen Konstruktor "Klasse blabla" zu nennen oder eine eingeschachtelte Funktion als "privat" zu bezeichnen.

Und nur weil ich z.B. in JS einzelnen Instanzen eigene Methoden geben kann, fallen mir dazu spontan keine Anwendungsfälle/Muster ein! Bräuchte ich sowas in Perl hätten halt die Instanzen ein Hash wo ich Coderefs namentlich ablege, und mittels AUTOLOAD würden diese aufgerufen. Es geht also in beiden Sprachen/Modellen, man braucht sowas aber wirklich selten.

Die oft zitierte Vererbung durch Cloning habe ich übrigens nicht so deutlich gesehen.

Wenn dir jetzt ein Anwendungsfall einfällt Objekte in JS deutlich anders und effizienter zu modellieren, dann wär ich dir für den Hinweis dankbar.

Bye
Kurt
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread Ein paar Programmiertricks