Zugriff auf alle Elemente einer eigenen Klasse
Diter
- javascript
Hallo,
ich habe folgendes Problem: ich habe in Javascript eine eigene Klasse erstellt.
var food = function(points){
this.x=0;
this.y=0;
this.points=points;
}
Dann erzeuge ich zwei Instanzen:
var apple = new food(10);
var superapple = new food(50);
jetzt würde ich gerne so auf die Instanzen zugreifen:
alert(food[0].x);
analog zu bspw.:
document.getElementsByTagName("p")[0]....
das funktioniert aber so nicht. kann ich so überhaupt so auf die Eigenschaften der einzelnen Instanzen zugreifen? wenn ja wie?
Danke.
Gruß, Dieter
Hi,
Dann erzeuge ich zwei Instanzen:
var apple = new food(10);
var superapple = new food(50);
>
> jetzt würde ich gerne so auf die Instanzen zugreifen:
>
> `alert(food[0].x);`{:.language-javascript}
Das geht nicht.
> analog zu bspw.:
> `document.getElementsByTagName("p")[0]....`{:.language-javascript}
> das funktioniert aber so nicht. kann ich so überhaupt so auf die Eigenschaften der einzelnen Instanzen zugreifen? wenn ja wie?
Pack' sie in ein Array.
MfG ChrisB
--
„This is the author's opinion, not necessarily that of Starbucks.“
jetzt würde ich gerne so auf die Instanzen zugreifen:
alert(food[0].x);
kann ich so überhaupt so auf die Eigenschaften der einzelnen Instanzen zugreifen? wenn ja wie?
Wenn food ein Array wäre, der die Instanzen enthält, würde das gehen - food ist aber die Konstruktorfunktion.
Wenn du einen Array aller Instanzen haben willst, musst du ihn selbst anlegen und jede Instanz diesem Array hinzufügen. Das kannst du natürlich im Konstruktor machen und den Array könntest du z.B. an der Konstruktorfunktion speichern:
function Food () {
if (!Food.instances) {
Food.instances = [ this ];
} else {
Food.instances.push(this);
}
}
var eins = new Food();
var zwei = new Food();
dann sind gefüllt
Food.instances[0] mit eins
Food.instances[1] mit zwei
Strenggenommen ginge auch Food[0], es muss nicht zwingend ein Array sein (ein Array ist auch nur ein Objekt mit Eigenschaften):
function Food () {
if (typeof Food.length == "undefined") {
Food.length = 0;
}
Food[Food.length] = this;
Food.length++;
}
Dann ginge Food[0], allerdings halte ich diese Vermischung nicht für guten Code. Verwende besser einen »statischen« Array am Konstruktor oder in einer anderen Variable bzw. Eigenschaft.
Mathias