Wenn die Prototypen ja nur EINMAL zur Übersetzungszeit angelegt werden, wieso geht dann folgendes:
Weil eval ein Übersetzungprozess ist.
Es geht also sehr wohl zur Laufzeit - also wird auch, wie ich geschrieben hab 2x eine Funktion angelegt, wenn ein Prototyp im Kontruktor vorhanden ist und diese Klasse 2x instanziiert wird.
Wie gesagt eval ist ein Übersetzungsprozess während der Laufzeit. Das erklärt aber nicht, warum die Prototypfunktionen absolut identisch sind, während Funktionen die mit this erzeugt werden unterschiedlich sind.
Du behauptest ja mittlerweile schon, dass
function klasse()
{
klasse.prototype.func = function() { alert("Funktion 1"); } ;
}technisch das gleiche sei wie
function klasse()
{}
klasse.prototype.func = function() { alert("Funktion 1"); } ;oder täusche ich mich?
Hab ich auch nicht behauptet, ich sagte ich hätte das noch nie gesehen. Der zweite Weg ist der übliche den ich bisher überall so gesehen habe.
Technisch ist aber das Erste eine priviligierte Prototyp Funktion das zweite nicht, was zumindest eine Erweiterung meines Wissens ist.
Was aber zu gehen scheint ist das die Übersetzung verhindert wird, was mir neu war. Nur, wenn einmal ein protoyp erzeugt wurde ist es immer der gleiche.
function klasse(c)
{
if(c == 1) klasse.prototype.func = function() { alert("Funktion 1"); } ;
if(c == 2) klasse.prototype.func = function() { alert("Funktion 2"); } ;
}
var a0 = new klasse(0);
alert( typeof a0.func ) // undefined
var a1 = new klasse(1);
a1.func(); // Funktion 1
var a2 = new klasse(2);
a2.func(); // Funktion 2
a1.func(); // Funktion 2
a0.func(); // Funktion 2
Struppi.
Javascript ist toll (Perl auch!)