我想用我的自定义范围调用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
。
我的代码中有什么问题?
答案 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规范的一部分。