Проблема в том, что setTimeout()
заставляет JavaScript использовать глобальную область видимости. По сути, вы вызываете класс method()
, но не из this
. Вместо этого вы просто указываете setTimeout
использовать функцию method
без какой-либо конкретной области видимости.
Чтобы исправить это, вы можете заключить вызов функции в другой вызов функции, который ссылается на правильные переменные. Это будет выглядеть примерно так:
test.protoype.method = function()
{
var that = this;
//method2 returns image based on the id passed
this.method2('useSomeElement').src = "http://www.some.url";
var callMethod = function()
{
that.method();
}
timeDelay = window.setTimeout(callMethod, 5000);
};
that
может быть this
, поскольку callMethod()
находится в области действия метода.
Эта проблема становится более сложной, когда вам необходимо передать параметры в метод setTimeout
, поскольку IE не поддерживает более двух параметров в setTimeout
. В этом случае вам нужно прочитать о замыканиях .
Также, как sidenote, вы настраиваете себя на бесконечный цикл, так как method()
всегда вызывает method()
.