molily: setInterval an object binden

Beitrag lesen

Hallo,

Also in deinem Code sehe ich nur einen Fehler, nämlich gehst du von einer umgekehrten Ausführungsreihenfolge der Befehle aus.

Siehe </archiv/2008/3/t167910/#m1095392>

var func = function () {...}; wird immer dort ausgeführt, wo die Anweisung steht, davor ist func nicht bekannt, erst darunter. Wenn du also so eine Funktion notierst, wie du es zweimal tust, dann kannst du diese erst danach aufrufen, nicht davor, wie du es zweimal tust.

Also entweder stellst du die Anweisungen um oder nutzt eine normale Funktions-Deklaration. function func () {...} wird nämlich zuerst ausgeführt, dann ist die Funktion bekannt. Man kann also func(); function func () {...} schreiben und trotzdem kann func ausgeführt werden.

Wie würde man das denn objektorientiert machen?

Na mit einem Konstruktor und Instanzen.

var b1 = new Blinker("DIV01");  
var b2 = new Blinker("DIV02");  
  
function Blinker (id)  {  
   this.element = document.getElementById(id);  
   this.state = true;  
   this.interval = window.setInterval(blinking, 1000)  
   var instance = this; // Variable mit Verweis auf die Instanz, die von der folgenden Funktion eingeschlossen wird. Sonst hätte sie keinen Zugriff auf die Instanz, weil setInterval sie in einem anderen Kontext ausführt.  
   function blinking () {  
      instance.element.style.color = instance.state ? "yellow" : "green";  
      instance.state = !instance.state;  
   }  
}

So könnte man noch Methoden start und stop hinzufügen, mit denen man das Blinken steuern könnte.

Mathias