Использование call
здесь не помогает: оно вызывает setTimeout
с вашим this
объектом, но сама функция обратного вызова все еще вызывается из глобальной области. То, что вы действительно хотите сделать, это что-то вроде этого:
function foo() {
var self = this;
this.bar = function() {
console.log("keep going");
window.setTimeout(function() { self.bar(); }, 100);
}
this.bar();
}
Редактировать: Если вы действительно хотите что-то похожее на подход call
, вы можете использовать bind
, который связывает значение this
для функции:
window.setTimeout(this.bar.bind(this), 100);
Однако это часть новой спецификации ECMAScript 5, которая еще не поддерживается всеми браузерами.