javascript setTimeout调用错误

Ger*_*ári 7 javascript scope call invoke settimeout

我想window.setTimeot用我的自定义范围调用该函数,所以我使用该call方法,但有一些错误.

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

new foo;
Run Code Online (Sandbox Code Playgroud)

在Firefox下,这只打印到控制台只有1行,然后什么也没有,在谷歌Chrome下它会抛出一个TypeError.

我的代码有什么问题?

cas*_*nca 8

使用call在这里没有帮助:它setTimeout使用您的this对象调用,但仍然从全局范围调用回调函数本身.你真正想要做的是这样的事情:

function foo() {
    var self = this;
    this.bar = function() {
        console.log("keep going");
        window.setTimeout(function() { self.bar(); }, 100);
    }
    this.bar();
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您真的想要类似于该call方法的东西,您可以使用bind哪个绑定this函数的值:

window.setTimeout(this.bar.bind(this), 100);
Run Code Online (Sandbox Code Playgroud)

但是,这是所有浏览器尚不支持的新ECMAScript 5规范的一部分.