Christian Kruse: Objekte?-Arrays?-Objekte?

Beitrag lesen

Hoi,

vorweg, ich bin kein Theoretiker, das heißt, ich reime mir zusammen was meiner Ansicht
und meiner Praxiserfahrung nach stimmen könnte.

Ein bisschen theoretisieren macht aber doch Spass ;-)

Aber rein theoretisch ist das Konzept hier ein wenig löchrig. Einerseits die strikt
durchgezogene Objekt-Orientierung, da geht einer her und macht ein Array einfach zu
einem Object, und schafft so die geniale Möglichkeit, objekt-orientiert mit diesen (dann
komplexen) Datentypen umzugehen, und dann andererseits, wird eine Ausnahme
gemacht, für indizierte Arrays, die werden dann behandelt wie simple Datentypen
(strings, integers, ...)

In JS sind auch Integer und Strings Objekte. Oder wie erklaerst du dir sonst folgendes:

var stringob = "ganz langer string";
alert(stringob.length);
alert(stringob.indexOf("g"));

Das finde ich ueberigens sehr konsequent, im Gegensatz zur grossen Schwester Java: dort
*gibt* es noch elementare Datentypen.
Aber mal was anderes: wie kommst du auf die Idee, dass, nur weil man nicht mit dem
.-Operator auf nummerisch indizierte Array-Elemente zugreifen kann, sie keine Objekte mehr
sind? [] ist lediglich ein Operator, in anderen Programmiersprachen kann er sogar ueberladen
werden (Ueberladen in JS, das waer doch mal was :-)
Neee, mich stoert was komplett anderes: wieso zum Teufel sind alle Objekts-Eigenschaften
und -Methoden public? Das widerspricht dem OO-Prinzip doch wohl voellig.

Ich fänds schöner, bzw. das Konzept irgendwie "kompletter" wenn sie die Sache mit
dem []-Operator entweder ganz durchziehen würden, oder gar nicht. Methoden lassen
sich ja schliesslich auch nicht über [] aufrufen. Ich finde das sehr verwirrend, dass Arrays
einerseits wie Objekte behandelt werden, bis auf den (der strengen Definition nach)
eigentlichen Sinnes eines (indizierten) Arrays.

Da hinkt bei mir die Sache noch ein wenig, da bick ich nicht so ganz durch, was der
Sinn dahinter sein soll.

hier sehe ich es als Pragmatiker.
Ein Array ist eine Liste von Elementen. Diese Elemente haben bestimmte Eigenschaften.
Gleichzeitig ist ein Array auch ein Object und dieses Objekt hat auch wieder bestimmte
Eigenschaften oder auch nicht :-)

Ack.

Arbeitshypothese:
<script>
var a = new Object();
a['name'] = "regenfeld";
a[0] = "hat die Adresse";
a['email'] = "regenfeld@gmx.net";

alert (a.name + " " + a[0] + " " + a['email']);
</script>

Also kann das indizierte Array-Element nicht als property abgelegt werden, nona,
schliesslich sind ja auch keine Zahlen als Bezeichner erlaubt. Die Frage ist halt, als
was werden sie dann abgelegt? Irgendwie müssen sie ja rein ins Objekt!

Intern wird es, denke ich, eine Liste geben. Aber das duerfte Implementierungs-abhaengig sein.

Denn das geht auch:

var blah = new Array();
blah[0]="abc";
alert(blah["0"]);

Natuerlich geht das: es wird beim []-Operator eine INT-Zahl erwartet und dadurch verursachst
du einen impliziten Typecast.

Gruesse,
 CK