Christian S.: Mit setTimeout funktion im eigenen Objekt aufrufen

Beitrag lesen

Hi,

function test()
{
  this.innerfunc = function(id)
  {
    ...

setTimeout('this.innerfunc('+id+')', 1000);
  }
}

setTimeout evaluiert hier einen String. Diese Evaluierung hat dann keinen Bezug mehr zu irgendwas, bzw. nur noch zum globalen Kontext. this zeigt dann auf window (bin mir ziemlich sicher).

Ich würde an setTimeout lieber einen Funktionspointer übergeben, als einen String. Dann hat man weniger Probleme, und es ist performanter:

var s = this;
setTimeout(function()
{
s.innerfunc(id);
}, 1000);

oder aber noch besser, du merkst die den die Funktion in einer Variablen, und rufst diese dann auf:

setTimeout(arguments.callee.call(this, id), 1000); // geht das so?? habs nicht getestet.

oder
var callee = arguments.callee;
setTimout(function()
{
callee(id);
}, 1000);

Gruß!