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.
我的代码有什么问题?
使用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规范的一部分.
| 归档时间: |
|
| 查看次数: |
2797 次 |
| 最近记录: |