molily: setInterval() wie referenzieren?

Beitrag lesen

Hallo,

this.trigger = setInterval("this.runThroughTasks()", this._timer);

geht nicht, da ja setInterval im window object liegt!

also versuchte ich

this.trigger = setInterval(function(){this.runThroughTasks()}, this._timer);

Alternativ zu den im Artikeln beschriebenen Methoden kann man sich dieser Methode aus Prototype bedienen:

Function.prototype.bind = function () {  
  var method = this, args = arguments, object = args.shift();  
  return function () {  
    return method.apply(object, args);  
  };  
};

Das fügt mittels prototypischer Erweiterung allen Function-Objekten eine Methode bind() hinzu. Darin wird eine Closure-Funktion erzeugt und zurückgegeben- Die ursprüngliche Methode wird darin mittels apply() im Kontext des übergebenen Objektes ausgeführt. Die Funktionsargumente werden weitergereicht.

Benutzung dann etwa so:

this.trigger = window.setInterval(this.runTroughTasks.bind(this), this._timer);

this.runTroughTasks.bind(this) gibt also eine Wrapper-Funktion zurück, die runThroughTasks im Kontext von this ausführt.

(Ein bloßes
this.trigger = window.setInterval(this.runTroughTasks, this._timer);
würde runThroughTasks nicht im Kontext der Instanz ausführen.)

Mathias

--
»No nations, no borders.«
Visitenkarte · SELFHTML Weblog