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

KurtZ
 2008-03-26 00:56
#107487 #107487
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
murphy+2008-03-25 22:30:22--
Das was new automatisch tut, nämlich den Prototypen zu klonen und dann eine Initialisierungsfunktion auszuführen, kann man auch von Hand machen:
Code: (dl )
1
2
3
4
5
6
var o0 = { a: 1, b: 2 };

var o1 = { };
o1.__proto__ = o0;

alert(o1.b);


Schon haben wir einen Klon von o0 erzeugt, ohne dass irgendwelche Klassen im Spiel wären ;-)


hmm dann haben wir unterschiedliche Vorstellungen von Klonen, in "perlisch" gesprochen ist o1.__proto__ eine Referenz auf o0. Klonen wäre für mich eine 1 zu 1 Kopie des Objektes, also in Perl eine Kopie der Hashes, %o1=%o0. (aber ich seh gerade dass müsste der unterschied zw. Shallow und Deep Cloning sein)

Bin übrigens darauf hingewiesen worden dass nur Netscape/Mozilla direkten Zugriff auf __proto__ erlauben.

Diese prototypische Vererbung ist schon schick, sowas wie "abstrakte Klassen" müsste sich so sehr einfach realisieren lassen, wenn man Klassen so einfach generiert wie Objekte.

Und wenn sowohl Vererbung als auch Instanzierung über die gleichen "new"-Semantik läuft ist die Komplexität geringer und es müsste auch simpler zu begreifen sein.

Es gibt übrigens auch ein "Prototype Pattern" wo viel geklont wird, vielleicht taucht deswegen die Begrifflichkeit so oft auf.

Naja genug philosophiert ist schließlich ein Perlforum :)

PS: JS ist mir übrigens sympatischer als Python, insbesondere als "embedded language" insbesondere auch weil viele Konzepte bei Perl angelehnt sind.

EDIT .... Man könnte auch alternativ den Begriff Typ statt Klasse nehmen um eine unmissverständliche Begrifflichkeit für beide Modelle zu haben.
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread Ein paar Programmiertricks