globe: Instanz im Objekt ermitteln

Beitrag lesen

n'abend,

Der Aufruf window.SetInterval("this.meineMethode()", 1000) klappt in diesem Kontext leider nicht. Wenn ich this durch den Namen der konkreten Instanz ersetze funktioniert es, aber der universelle Ansatz meines Objektes geht verloren.

Das funktioniert nicht, weil "this.meineMethode()" im Kontext von window ausgeführt wird. Es wird also versucht window.meineMethode() auszuführen. Diese Methode wird vermutlich (/hoffentlich) einfach nicht existieren.

Gibt es einen Trick, um innerhalb eines Objektes auf den Namen der Instanz zu schliessen?

nein, da das Objekt seinen "Namen" nicht kennt. wozu auch? Namen sind nur Schall und Rauch™.

Möglicherweise möchtest du dir mal des Meisters Artikel Organisation von JavaScripten durchlesen, um das folgende eingehend zu verstehen.

Du kannst den Funktionsaufruf kapseln / einschliessen (engl. to enclose). Diese Technik nennt man Closures. Beispielhaft:

function MyObject()  
{  
  // wir wollen auf this zugreifen können, ohne das schlüsselwort this zu benutzen und referenzieren es deshalb mittels self, welches wir später in eine Funktion einschliessen können  
  var self = this;  
  var interval = null;  
  var counter = 1;  
  
  // funktion zum registrieren eines intervals  
  this.start = function()  
  {  
    var gekapselterAufruf = function()  
    {  
      // self ist hier automatisch verfügbar und referenziert das aktuelle objekt.  
      self.ausfuehren();  
  
      // wir wollen es nicht übertreiben und stoppen den interval nach 5x wieder  
      counter++;  
      if( counter > 5 )  
        self.stop();  
    };  
    interval = window.setInterval( gekapselterAufruf ,1000); // keine ()! wir übergeben eine Referenz auf die Funktion, wir führen diese hier aber noch nicht aus!  
  };  
  
  // funktion zum stoppen des intervals  
  this.stop = function()  
  {  
    window.clearInterval( interval );  
    interval = null;  
  }  
  
  // eine methode des objekts, die wir ausführen wollen  
  this.ausfuehren = function()  
  {  
    alert( "schön von dir zu hören, nummer " + counter );  
  };  
  
}  
  
var instance = new MyObject();  
instance.start();

weiterhin schönen abend...

--
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|