Calocybe: variablenbezeichnung erst zur laufzeit erzeugen

Beitrag lesen

Hi Bernhard!

Aber:  blah[0]="abc";
       alert(blah.0);
geht nicht.

Natuerlich nicht, denn 0 und ueberhaupt einfach Zahlen sind keine gueltigen Bezeichner in JS. Man kann sie also nicht als Property hinschreiben. Das hat aber mit Objekten oder Arrays zu tun.

Aber rein theoretisch ist das Konzept hier ein wenig löchrig.

Nicht nur hier. Ueberhaupt passieren in JS immer mal Dinge, die voellig unlogisch sind. "Automagics" nennt man sowas. Ich hasse das.

Anmerkung: Hab gerade in meiner Javascript-Bibel nachgelesen - nachdem ich obiges geschrieben habe! Ich habs aber stehengelassen, um meinen (wies scheint) Denkfehler zu verdeutlichen. Es werden nämlich nicht Arrays als Objekte gehandhabt, sondern Objekte intern als assoziative Arrays!

Genau so isses!

machst du aber folgendes:
my.vorname="keine Ahnung";
geht alert(my["vorname"]) und alert(my.vorname)
für my2 aber nicht.

Wieso soll das fuer my2 nicht gehen?

Obige anmerkung würde auch das erklären. Allerdings nicht dass das:
MyClass.prototype.vorname="keine Ahnung";
alert(my2["vorname"]);
alert(my2.vorname)
funktioniert, oder zumindest irgendwie kompliziert implementiert wurde.

Ja, JS' Auffassung von Vererbung. Wird eine Property nicht direkt im Objekt gefunden, wird im Prototyp danach gesucht. Ist mir jetzt zu aufwendig zu erklaeren. In der Netscape-Doku ist es aber ausfuehrlich beschrieben.

Varainte 1) Assoziative Arrays sind Objekte. Unklar: Was sind dann "normale" (indizierte) Arrays?

Da es nicht so ist, stellt sich die Frage ja nicht. ;-) Na zumindest nicht so.

Variante 2) Objekte werden intern als assoziative Arrays behandelt. Unklar: Wie kommen dann die Methoden ins Spiel.

Ganz einfach. Methoden sind auch nur ganz normale Properties. Sie haben nicht den Typ number, string oder sowas, sondern eben den Typ function. Hat man eine Variable X dieses Typs, kann man mit X() die Funktion/Methode aufrufen.

Und auch die Unklarheit, wie indizierte arrays dann abgelegt würden bleibt.

Assoziative Arrays bedeutet ja eine Key->Value Zuordnung. Aber wer sagt, dass man als Key nur einen String nehmen kann? Eine Zahl tut's doch genauso.

Alles in allem wär mir obige Variante noch eher verständlich.

Mir nicht. ;-)

Ja ist es, hinter js steht mehr als die meisten erwarten und glauben.

Ich finde, es ist mit seinen Automagics unnoetig kompliziert. Letztlich kann man sowieso nicht sauber damit programmieren.

ja, das hab ich so langsam auch entdeckt, und es gefällt mir sehr gut, das ganze Konzept von JS, ... bis auf diese Sache hier *fg* die ich nicht kapier ;-) Ausserdem hatt ich schon kürzlich einen sehr interessanten Thread zu diesem Thema, find ich höllisch spannend, die OO-Klassen-Thematik in Javascript!

Kannst ja mal im Archiv nach "Kontinuum" suchen, da sollte sich noch mehr darueber finden. Dort muessten auch entsprechende Links in die Netscape-Doku stehen, wo noch so einiges mehr erklaert ist.

So long