Hallo,
Ergänzung zu LenaLuna: Man muss nicht mit globalen Variablen arbeiten. Es gibt eine Möglichkeit:
function Obj () {
var self = this;
this.countdown = 10;
this.count = function () {
if (this.countdown--) {
alert(this.countdown);
window.setTimeout(
function () {
self.count();
},
1000
);
}
};
}
var o = new Obj;
o.count();
Grundvoraussetzung: Man kann setTimeout nicht nur Strings, sondern auch Funktionsobjekte übergeben.
Hier legt man eine Referenz auf die Instanz an (var self = this;). self ist auch in methode verfügbar, weil diese in in der (Konstruktor-)Funktion Obj notiert ist und damit Zugriff auf dessen lokale Variablen hat.
self ist dann aus demselben Grund in der anonymen Funktion verfügbar, die setTimeout übergeben wird. Der Effekt nennt sich »Closure«.
Die Hintergründe werden hier erklärt: Organisation von JavaScripten, insbesondere Methoden eigener Objekte in anderen Kontexten ausführen und Einführung/von Closures. Dort gibt es auch Beispiele mit setTimeout.
Eine verallgemeinerte Lösung, die konzeptionell gleich arbeitet, ist bind().
Mathias