Gustav-Gans: setTimeout/setInterval zusammen mit this

Gibt es eine Möglichkeit, mittels setTimeout, oder setInterval auf eigene Methoden zuzugreifen?

Bsp:
setInterval('this.Run()', 1000);

Schon mal vielen Dank im voraus

  1. Hallo Gustav.

    Gibt es eine Möglichkeit, mittels setTimeout, oder setInterval auf eigene Methoden zuzugreifen?

    Bsp:
    setInterval('this.Run()', 1000);

    Ja. Verzichte auf this.

    Einen schönen Samstag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    mathbr:del.icio.us/
  2. Hallo,

    Gibt es eine Möglichkeit, mittels setTimeout, oder setInterval auf eigene Methoden zuzugreifen?

    Bsp:
    setInterval('this.Run()', 1000);

    function Objekt () {  
       this.run = function () {  
          alert("run!");  
       };  
       this.start = function () {  
          var self = this;  
          var closure = function () {  
             self.run();  
          }  
          window.setTimeout(closure, 1000);  
       };  
    }  
    var instanz = new Objekt;  
    instanz.start();
    

    Die Referenz auf die Instanz speichert man in einer Variable, hier self. Dann definierst man eine »lokale« Funktion über eine Function Expression, hier mit dem Namen closure. Diese Funktion hat eine Closure-Funktion, das heißt, die Variable self ist in ihrem Geltungsbereich verfügbar. Mit setTimeout ruft man dann diese Funktion verzögert auf. Wenn closure aufgerufen wird, geschieht das außerhalb des Kontextes der Instanz und der start-Methode. Aber über self ist darin dennoch ein Ansprechen der run-Methode möglich. run muss dabei eine öffentliche Funktion sein, denn closure wird im globalen Kontext ausgeführt (= this wäre gleich window). Also wird von außen auf die Instanz zugegriffen.

    Die Closure-Funktion lässt sich auch anonym als Function Expression notieren:

    var self = this;  
    window.setTimeout(function () { self.run() }, 1000);
    

    Mathias