Stefan Beck: Zugriff auf Member in verschachtelten Funktionen eines Objekts

Beitrag lesen

Hallo, danke für die Antwort.

Leider trift das ganze mein Problem nicht ganz.

Generell halte ich mich an http://phrogz.net/JS/Classes/OOPinJS.html, wenn bei mir Unklarheiten bzgl. der verschiedenen "Arten" public, private, privileged von Methoden und Eigenschaften auftauchen.

Danke für den Link, ist eine schöne Übersicht, allerdings soweit ichs beurteilen kann nicht relevant für mein Problem.

Durch das this.{name} sind diese Methoden privilegierte Methoden.
(Mittels var {name} = function() wären sie private Methoden.)

Handler[ Count ] = function( evt )

Aber was ist mit der hier?

Diese Funktion wurde bereits weiter oben innerhalb eines privaten Array definiert:

var Handler = new Array( size );

Die Funktion Handler[ Count ] soll nicht von außerhalb gerufen werden können, sondern nur von ajaxQueue selbst. Der Aufruf an und für sich funktioniert auch. Die privaten und privilegierten Methoden sind gewollt so gesetzt. Ich habe allerdings auch schon einmal alles privilegiert deklariert (man experimentiert schon), ohne Effekt.

Nochmal das Problem, so wie es auftritt:
Mittels AddRequest werden Daten in das Objekt ajaxQueue eingefügt. Dabei werden jedesmal verschiedene Funktionen Handler[ Count ] mit einem Datensatz verknüpft.
Die Funktion Handler[ Count ] wird dann als Event-Handler aufgerufen. Bis zu diesem Punkt funktioniert alles wunderbar, die Daten werden korrekt eingefügt, die Handler werden korrekt gesetzt, und sie reagieren auf das entwprechende Event.
Allerdings reagieren sie falsch. Wie bereits erwähnt gehört jeder Handler[ Count ] zu anderen Membern von ajaxRequest, z.B. Request[ Count ]. Innerhalb eines Handler[ Count ] kann ich allerdings nicht mehr auf diese anderen Member von ajaxRequest zugreifen.
Wenn ich so z.B. mittels alert( EventName ); etwas anzeigen lasse, wird die Zugehörigkeit von Handler[ Count ] zu ajaxRequest nicht erkannt, und es wird im globalen Scope eine neue Variable EventName angelegt. Wenn ich die Zugehörigkeit explizit kennzeichnen will, also alert( ajaxQueue.EventName ); anfordere, bekomme ich wiederum den Fehler, "... has no properties". Blöd.

Ich würde es an dieser Stelle also mal mit
this.Handler[ Count ] = function( evt )

Nun, gut dass du nichts verprochen hast ;-) aber vielen Dank!

Normalerweise sollte es doch vereinfacht so funktionieren.... nochmal vereinfacht woran es hapert:

function Object()
{
  var data=5;
  this.moredata=6;
  var f1;
  var f2 = new function()
    {
      f1 = new function()           //f1 dynamisch erzeugen
        {
          alert( data );            //gibt "undefined"
          alert( this.moredata );   //erzeugt Fehler "this.moredata has no properties"
        }
      f1();                         //f1 ausführen
    }
}

Any ideas? Vermutlich stell ich mich grad äußerst dämlich an, aber ich denke nach zwei Tagen an diesem Problem fehlt mir langsam die Objektivität.

Beste Grüße
  Stefan