Objekte in einem Array speichern
.type
- javascript
0 Der Martin0 ChrisB0 .type0 molily
0 Struppi0 Timo "God's Boss" Reitz
Liebe Javascript Profis,
function pc (infd,ntpc,stop){
this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
if(this.infd==1){
document.write(this.ntpc," is infected! <br>");
}
while(this.stop=0){
var rpn=Math.floor(Math.random()*nmc)
pca[rpn](1,rpn,0);
}
}
var nrp=0;
while(nrp<nmc){ //nmc wird schon vorher definiert, der Teil Skriptes,
//ist bloss für das Problem irrelevant
var pca[nrp]= new pc(0,nrp,0);
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
nrp=nrp+1;
}
Ich möchte im Endeffekt eine while-Schleife haben, die mir eine gewisse Anzahl von Objekten erstellt und einen Inhalt, die dieses Objekt gleich verarbeitet.
Ich erhalte folgende 2 Fehler Meldungen im IE 7: Exspected: ";" und Object exspected.
Ist das so überhaupt möglich oder mache ich einen (Denk-)Fehler?
Danke schon mal im Vorraus für eure Antwort,
lg .type
Hallo,
Ich erhalte folgende 2 Fehler Meldungen im IE 7: Exspected: ";" und Object exspected.
schade, dass du nicht verrätst, für welche Zeilen diese Meldungen auftreten.
function pc (infd,ntpc,stop){
this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
Vielleicht ist es keine gute Idee, einen Parameter so zu nennen wie eine Methode des window-Objekts. Ich bin mir nicht so sicher, ob dieser Namenskonflikt den IE ins Straucheln bringt.
while(this.stop=0){
Und hier konstruierst du eine Schleife, die nie ausgeführt wird. Denn in der Klammer steht eine Zuweisung, kein Vergleich; und da du den Wert 0 zuweist, der als false gilt, wird die Schleife sofort abgewiesen (der Vergleichsoperator ist '==').
So long,
Martin
Hi,
Vielleicht ist es keine gute Idee, einen Parameter so zu nennen wie eine Methode des window-Objekts. Ich bin mir nicht so sicher, ob dieser Namenskonflikt den IE ins Straucheln bringt.
Der IE kennt window.stop doch gar nicht ...
MfG ChrisB
Hallo Chris,
Vielleicht ist es keine gute Idee, einen Parameter so zu nennen wie eine Methode des window-Objekts. Ich bin mir nicht so sicher, ob dieser Namenskonflikt den IE ins Straucheln bringt.
Der IE kennt window.stop doch gar nicht ...
das war mir bisher nicht bewusst, danke - aber diese Wissenslücke halte ich angesichts des geringen Nutzwerts von window.stop() für unerheblich - ich wüsste jedenfalls keinen Anwendungsfall.
So long,
Martin
das war mir bisher nicht bewusst, danke - aber diese Wissenslücke halte ich angesichts des geringen Nutzwerts von window.stop() für unerheblich - ich wüsste jedenfalls keinen Anwendungsfall.
darüber da hab ich mir auch schon oft Gedanken gemacht und bin zu keiner Antwort gekommen.
Struppi.
Hat noch jemand eine Idee zu meinem anfänglichen Problem? :)
Lg.,
.type
Hat noch jemand eine Idee zu meinem anfänglichen Problem? :)
Hat ich doch schon geschrieben.
Struppi.
Hallo,
Ich erhalte folgende 2 Fehler Meldungen im IE 7: Exspected: ";" und Object exspected.
schade, dass du nicht verrätst, für welche Zeilen diese Meldungen auftreten.
function pc (infd,ntpc,stop){
this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
In de.selfhtml.org wird unter der Eigendefinierung von Objekten selbiges als Beispiel angeführt und der IE 7 streikt da nicht.
while(this.stop=0){
Hab ich verbessert.
Habe zu den Zeilen ein Kommentar gegeben, wo die Fehlermeldung ist, habe ich vorhin natürlich vergessen :)
function pc (infd,ntpc,stop){
this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
if(this.infd==1){
document.write(this.ntpc," is infected! <br>");
}while(this.stop=0){
var rpn=Math.floor(Math.random()*nmc)pcarpn;
}
}var nrp=0;
while(nrp<nmc){ //nmc wird schon vorher definiert, der Teil Skriptes,
//ist bloss für das Problem irrelevant
var pca[nrp]= new pc(0,nrp,0); //Hier ist der erste Fehle
//(Exsp..)
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
nrp=nrp+1;
}
Der zweite Fehler wird ganz am Ende des Scriptes angegeben, wenn ich aber die Zeile vom ersten Fehler auskommentiere, kommt auch die zweite Fehlermeldung nicht.
lg.,
.type
function pc (infd,ntpc,stop){
Vielleicht ist es keine gute Idee, einen Parameter so zu nennen wie eine Methode des window-Objekts. Ich bin mir nicht so sicher, ob dieser Namenskonflikt den IE ins Straucheln bringt.
Wieso sollte er? IE implementiert die Scope Chain hinreichend korrekt.
Man kann dann natürlich nicht mehr stop() schreiben, wenn man window.stop meint, sondern muss ausdrücklich window.stop schreiben. Aber das sollte man ohnehin tun.
Darüber hinaus sehe ich kein Problempotenzial.
Mathias
Man kann dann natürlich nicht mehr stop() schreiben, wenn man window.stop meint, sondern muss ausdrücklich window.stop schreiben. Aber das sollte man ohnehin tun.
Das ist auch unsicher, es könnte ja in der Scope Chain ein anderes window
auftauchen.
...
var pca[nrp]= new pc(0,nrp,0);
...
Ist das so überhaupt möglich oder mache ich einen (Denk-)Fehler?
Ja, du musst zuerst pca definieren, zumindest als Objekt und dann kannst du erst eine Eigenschaft hinzufügen.
Struppi.
...
var pca[nrp]= new pc(0,nrp,0);
...
Ist das so überhaupt möglich oder mache ich einen (Denk-)Fehler?Ja, du musst zuerst pca definieren, zumindest als Objekt und dann kannst du erst eine Eigenschaft hinzufügen.
Struppi.
Ich hab pca als Array definiert, geht das dann so?
Lg.,
.type
Struppi.
Bitte kein Fullqoute!
Ich hab pca als Array definiert, geht das dann so?
Ja, aber dann musst du das var wegmachen.
Struppi.
Struppi.
Bitte kein Fullqoute!
Ich hab pca als Array definiert, geht das dann so?
Ja, aber dann musst du das var wegmachen.
Struppi.
Jetzt habe ich für diese Zeile einen Fehler (Hab jetzt die ganze pc funktion kopiert:)
function pc (infd,ntpc,stop){ this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
if(this.infd==1){
document.write(this.ntpc," is infected! <br>");
}
while(this.stop==0){
var rpn=Math.floor(Math.random()*nmc)
pca[rpn](1,rpn,0); //Fehler: Object doesn't support this method or
//property.
}
}
Nur kruze Erklärung diese Funktion ist das Mutterobjekt und alle Objekte sollen sich gegenseitig ändern (das ist die Zeile wo der Fehler ist).
lg.,
.type
PS: Danke nochmal für eure Hilfe bis jetzt :)
Hi,
Bitte kein Fullqoute!
Was hast du an dieser Aufforderung nicht begriffen?
pcarpn; //Fehler: Object doesn't support this method or
//property.
Du hast also im Array Funktionsreferenzen gespeichert?
Oder was willst du an dieser Stelle aufrufen?
Nur kruze Erklärung diese Funktion ist das Mutterobjekt und alle Objekte sollen sich gegenseitig ändern (das ist die Zeile wo der Fehler ist).
Was dein Code eigentlich machen soll, hast du bisher immer noch nicht verstaendlich und nachvollziehbar beschrieben - das macht es ziemlich schwer, dir weiterzuhelfen.
MfG ChrisB
Was hast du an dieser Aufforderung nicht begriffen?
Es tut mir Leid, dass ich das Antwortsystem dieses Forums noch nicht verstanden habe, ich bitte um Nachsicht
Du hast also im Array Funktionsreferenzen gespeichert?
Oder was willst du an dieser Stelle aufrufen?
»»Was dein Code eigentlich machen soll, hast du bisher immer noch nicht verstaendlich und nachvollziehbar beschrieben - das macht es ziemlich schwer, dir weiterzuhelfen.
Unter PC lege ich eine Funktion fest, die in allen Objekten vorhanden sein soll. Dann erstelle ich einen Array mit Objekten, die ich mit einer while-Schleife erstelle. Jedes Objekt ist durchnummeriert (-> Daher ein Array). Die Funktion in jedem Objekt sollte nun die Werte von anderen Objekten verändern, genau das Objekt mit der Zufallszahl (-> Deswegen durchnummeriert).
Ich hoffe jetzt ist ein bisschen klarer.
lg.,
.type
Hi,
Unter PC lege ich eine Funktion fest, die in allen Objekten vorhanden sein soll. Dann erstelle ich einen Array mit Objekten [...]
Schoen und gut, aber meine Frage hast du nicht beantwortet:
pcarpn; //Fehler: Object doesn't support this method or
//property.
Du hast also in *diesem* Array Funktionsreferenzen gespeichert?
Oder *was* willst du an dieser Stelle *aufrufen*?
MfG ChrisB
Du hast meine Antwort nicht genau gelesen, die Frage ist darin auch beantwortet. Im Array selbst sind einfach Objekte gespeichert. In diesen Objekten wird die Funktion "pc" ausgeführt.
Mit diesem Teil will ich ganz normal das aufrufen, was unter dieser Nummer nämlich der Zufallszahl rpn, gespeichert ist und ihm gleich Daten in () übermitteln.
Hab ich da einen Denkfehler?
lg.,
.type
Yerf!
Du hast meine Antwort nicht genau gelesen, die Frage ist darin auch beantwortet.
Das Problem ist, dass das Ganze etwas... verworren ist. Ich hatte auch probleme zu verstehen, was eingentlich passieren soll.
Im Array selbst sind einfach Objekte gespeichert. In diesen Objekten wird die Funktion "pc" ausgeführt.
In diesen Objekte wird keine Funktion ausgeführt. Sie wurden nur über den Konstruktor "pc" erstellt.
Mit diesem Teil will ich ganz normal das aufrufen, was unter dieser Nummer nämlich der Zufallszahl rpn, gespeichert ist und ihm gleich Daten in () übermitteln.
Hab ich da einen Denkfehler?
Ja. Du kannst an einem bestehenden Objekt nicht nochmals den Konstruktor aufrufen um es zu modifizieren. Entweder baust du ein neues Objekt oder du gibst den Objekten eine Methode mittels derer du sie modifizieren kannst und rufst diese dann auf.
Gruß,
Harlequin
Das Problem ist, dass ich kein neues Objekt erstellen kann, da die Objekte durchnummeriert sein müssen und ein zweites Objekt ja nicht mehr logisch verbunden wäre.
Wärest du so nett und könntest du mir ganz kurz darstellen, wie du das mit einer Methode meinst?
Danke im Vorraus,
lg.,
.type
PS: Es ist leider nicht viel einfacher zu erklären. Ich hoffe es geht trotzdem irgendwie :)
Yerf!
Wärest du so nett und könntest du mir ganz kurz darstellen, wie du das mit einer Methode meinst?
So wie du im Konstruktor Eigenschaften festlegst kannst du dort auch Funktionen anlegen, die dann zum Objekt gehören:
Ausgang:
function pc (infd,ntpc,stop){
this.infd=infd;
this.ntpc=ntpc;
this.stop=stop;
if(this.infd==1){
document.write(this.ntpc," is infected! <br>");
}
while(this.stop=0){
var rpn=Math.floor(Math.random()*nmc)
pca[rpn](1,rpn,0);
}
}
Wenn ich dich richtig verstehe soll die Konstruktorfunktionalität am bestehenden Objekt nochmals ausgeführt werden:
function pc (infd,ntpc,stop){
this.modify = function (_infd,_ntpc,_stop){
this.infd=_infd;
this.ntpc=_ntpc;
this.stop=_stop;
if(this.infd==1){
document.write(this.ntpc," is infected! <br>"); //hier solltest du dir noch eine andere Ausgabe überlegen
}
while(this.stop=0){
var rpn=Math.floor(Math.random()*nmc)
pca[rpn](1,rpn,0);
}
}
this.modify(infd,ntpc,stop)
}
Wie du siehst habe ich die funktionalität in eine Methode namens Modify verlagert und nutze diese für die Initialisierung. Zu einem späteren Zeitpunkt kannst du diese folgendermaßen aufrufen:
objektName.modify(infd,ntpc,stop);
Wobei objektName in deinem Fall pca[nrp] sein müsste.
Beachte auch den Kommentar, ein document.write innerhalb einer Funktion zerstört dir das Dokument im Browser, das willst du sicherlich nicht... Benutze lieber ein vorhandenes Element im Dokument und ändere dessen Inhalt.
Gruß,
Harlequin
PS: das ganze ist ungetestet und soll vor allem das Prinzip veranschaulichen.
Obwohl es ungetest ist, hat es gut funktioniert, danke :)
Jetzt habe ich nur ein neues Problem, beim Aufrufen der Funktionen aus dem Array kommt jetzt, dass ein Objekt erwartet wird. Das Problem war vorher nicht da aber in deinem Vorschlag wird ja nichts am Objektauruf geändert.
var nrp=0;
var nsp=0;
while(s<=hlr){
while(nrp<nmc){
pca[nrp]= new pc(0,nrp,0);
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
nrp=nrp+1;
}
lg.,
.type
Yerf!
Jetzt habe ich nur ein neues Problem, beim Aufrufen der Funktionen aus dem Array kommt jetzt, dass ein Objekt erwartet wird. Das Problem war vorher nicht da aber in deinem Vorschlag wird ja nichts am Objektauruf geändert.
Hm, im geposteten Code führst du eigentlich keine Funktion aus, sondern erstellst nur neue Objekte. An welcher Stelle genau tritt der Fehler auf?
Tipp: Teste im FireFox, dessen Fehlerkonsole (im Menü unter Extras) liefert genauere Meldungen.
Gruß,
Harlequin
In den beiden Zeilen:
pca[nrp]= new pc(0,nrp,0);
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
Sry meinte Objekt.
lg.,
.type
Hallo .type,
pca[nrp]= new pc(0,nrp,0);
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
warum liegt pca einmal unter document, und einmal nicht?
Gruß, Jürgen
Yerf!
pca[nrp]= new pc(0,nrp,0);
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
>
> warum liegt pca einmal unter document, und einmal nicht?
Das ist so ein Punkt, den ich mir auch schon die ganze zeit überlege. Aber sie 2 Arrays speichern unterschiedliche Dinge, weshalb es Absicht sein könnte. Die Frage ist nur, hat der OP beide Arrays zuerst als new Array() erzeugt oder nur eines davon? Oder sollte das doch nur ein Array sein? Dann sieht aber die 2. zeile mit der Zuweisung seltsam aus, da hier das Objekt durch eine zahl ersetzt werden würde...
Gruß,
Harlequin
--
<!--[if IE]>This page is best viewed with a webbrowser. [Get one today!](http://www.opera.com)<![endif]-->
Da liegt mein Denkfehler, danke :)
Habe die zweite Zeile gelöscht und sie da es funktioniert ohne Fehlermeldung.
Danke für all eure Hilfe :)
lg.,
.type
Habs jetzt auch mit Firexfox getest die Fehler-Konsole sagt nicht mehr bzw. das gleiche aus.
lg.,
.type
Hi,
Du hast meine Antwort nicht genau gelesen, die Frage ist darin auch beantwortet.
Wenn du das meinst, dann hast du meine Frage wohl nicht verstanden.
Im Array selbst sind einfach Objekte gespeichert. In diesen Objekten wird die Funktion "pc" ausgeführt.
Nein.
MfG ChrisB
Unter PC lege ich eine Funktion fest, die in allen Objekten vorhanden sein soll.
Du erstellst eine Funktion pc, das ist korrekt. Sie soll in allen Objekten sein. Das macht dein Code aber nicht, stattdessen ruft er die Funktion als Konstruktor auf.
Dann erstelle ich einen Array mit Objekten, die ich mit einer while-Schleife erstelle.
Richtig, die Objekte im Array sind aber keine Funktionen, sondern Objekte, die durch pc konstruiert wurden (siehe oben).
Jedes Objekt ist durchnummeriert (-> Daher ein Array). Die Funktion in jedem Objekt sollte nun die Werte von anderen Objekten verändern, genau das Objekt mit der Zufallszahl (-> Deswegen durchnummeriert).
Die Objekte enthalten keine Funktionen. Solltest du seit gestern eigentlich wissen!
Ich hoffe jetzt ist ein bisschen klarer.
Klar ist vor allem: Beschäftige dich mit OOP in JavaScript. Vielleicht hilft ja schon <http://de.selfhtml.org//javascript/sprache/objekte.htm@title=Objekte, Eigenschaften und Methoden>.
while(this.stop=0){
Dazu wurde ja schon was geschrieben.
pca[rpn](1,rpn,0);
Was hast du dir bei dieser Konstruktion gedacht? Wenn ich das richtig sehe, enthält pca[rpn]
keine Funktion, also sollte der Aufruf fehlschlagen (passiert allerdings nicht, wegen der dysfunktionalen while
-Schleife).
document.pca[nrp]=pca[nrp].infd + pca[nrp].ntpc + pca[nrp].stop;
Hältst du es für klug, an document etwas anzuhängen in dieser Art?
Ich möchte im Endeffekt eine while-Schleife haben, die mir eine gewisse Anzahl von Objekten erstellt und einen Inhalt, die dieses Objekt gleich verarbeitet.
Ich erhalte folgende 2 Fehler Meldungen im IE 7: Exspected: ";" und Object exspected.
Hast du eine Konstruktion wie
var x[y]=z;
noch irgendwo im Code? Ist nämlich ungültig! Korrekt wären beispielsweise
var x={y:z};
oder
var x=new Foo();
x[y]=z;