javascript setTimeout调用错误

时间:2011-05-24 14:48:03

标签: javascript scope call settimeout invoke

我想用我的自定义范围调用window.setTimeot函数,所以我使用call方法,但是出了点问题。

function foo() {
    this.bar = function() {
        console.log("keep going");
        window.setTimeout.call(this,this.bar,100);
    }
    this.bar();
}

new foo;
在Firefox下,这只打印到控制台只有1行,然后没有,在谷歌浏览器下它会抛出一个TypeError

我的代码中有什么问题?

1 个答案:

答案 0 :(得分:8)

使用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规范的一部分。