Javascript Objekt-Instanzen im Array

  • Themenstarter Themenstarter Netzwerkidi
  • Beginndatum Beginndatum
N

Netzwerkidi

Hallo in die Runde,

Zeit für die Wochenend-Aufgabe ;-)

Nein, Spass beiseite, ich habe ein Javascript Objekt-(Instanz-)Problem. Vielleicht kennt sich einer aus.

Ich habe:

Code:
function Apple (type) {
    this.type = type;
    this.color = "red";
    this.getInfo = function() {
        return this.color + ' ' + this.type + ' apple';
    };
}

var apple1 = new Apple('macintosh');
apple1.color = "reddish";
alert(apple1.getInfo());

(von: // http://www.phpied.com/3-ways-to-define-a-javascript-class/ )

var apple2 = new Apple('bigmac');
apple2.color = "ketchuprot";
alert(apple2.getInfo());

So, ich habe zwei Objekte kreiert auf Basis der "Klasse" Apple und die werden auch angezeigt.

Wenn ich nun aber das System abfragen wollte, zeige mir doch mal alle Apple-Computer, dann muss ich also die einzelnen Objektnamen kennen.
Also apple1 und apple2 usw.

[Man merkt es vielleicht, ich habe die relationale Denke.]

Wenn ich nun nicht alle Objekte im Kopf behalten wollte, würde ich also ein Array (oder Objekt(?)) anlegen, in dem alle Apple-Computer enthalten sind.

Nur wie kann ich dem Array sagen, nimm die Klasse Apple als "Vorlage" oder müsste etwas anderes sein? Irgendwie komme ich da nicht weiter.

Geht das überhaupt? Es wäre ja dann im Prinzip eine Tabelle.

Mein Ansatz wäre irgendwie in der Art:

Code:
var alleAppleComputer = [];  // Hier nun die KORREKTE Instanzierung mit der Klassezuweisung
alleAppleComputer['apple1'].color='blue';
alleAppleComputer['apple2'].color='green';

for (n in alleAppleComputer){
  alert(alleAppleComputer[n].showInfo());
}

Wer es weiß, aber nicht erklären kann, aber einen Link hat, der Link würde mir schon mal wieder weiterhelfen...

Grüße
Idi
 
Was du schreibst ist etwas verwirrend und du mischst in deinem Beispiel Array und Objekt. Ich schreib einfach mal zwei Beispiele, vielleicht klärt sich damit alles.

Mit Arrays
Javascript:
var apple1 = new Apple('macintosh');
apple1.color = "reddish";

var apple2 = new Apple('bigmac');
apple2.color = "ketchuprot";

var myArray = [];
myArray[0] = apple1;
myArray[1] = apple2;

for(var i = 0; i < myArray.length; i++) {
	alert(myArray[i].getInfo());
}

Mit Objekten
Javascript:
var apple1 = new Apple('macintosh');
apple1.color = "reddish";

var apple2 = new Apple('bigmac');
apple2.color = "ketchuprot";

var myDictionary = {};
myDictionary['apple1'] = apple1;
myDictionary['apple2'] = apple2;

for(var key in myDictionary) {
	alert(myDictionary[key].getInfo());
}
 
Die Verwirrung kommt vielleicht, weil ich wahrscheinlich etwas will, was nicht geht, oder für das Javascript vielleicht ungeeignet ist.

Ich will im Prinzip die folgenden Zeilen einsparen:

Code:
var apple1 = new Apple('macintosh');
apple1.color = "reddish";
 
var apple2 = new Apple('bigmac');
apple2.color = "ketchuprot";

und stattdessen direkt ins Array oder Object schreiben.

Nehmen wir an, ich habe eine Bildschirmmaske, wo ich die ganzen Computer erfasse.
Jetzt müsste ich ja pro neue Zeile mindestens die folgenden Befehle absetzen, wenn die Objekte "Apple" und "myDictionary" jetzt mal im Beispiel schon existieren würden:

Code:
Zeile 1: var apple_N = new Apple('bigmac');
Zeile 2: apple_N.color = "ketchuprot";
Zeile 3: myDictionary['apple_N'] = apple1;

Ich will also die Zeilen 1 und 2 sparen und direkt irgendwie mit Zeile 3 arbeiten - falls das geht.

Was ich vermute, ist aber, dass ich da auf dem Holzweg bin, da ich versuche eine relationale Datenbankverarbeitung zu emulieren.
 
Es hindert dich niemand daran, folgendes zu tun

Javascript:
myDictionary['apple_N'] = new Apple('bigmac');
myDictionary['apple_N'].color = 'ketchuprot';

Wieso auch, du schiebst nur Referenzen hin und her.

Und wenn du es etwas exotischer willst, kannst du auch beide in eine Zeile stecken :-D

Javascript:
(myDictionary['apple_N'] = new Apple('bigmac')).color = 'ketchuprot';
 
Zurück