我想调用window.setTimeot https://developer.mozilla.org/en/DOM/window.setTimeout功能与我的自定义范围,所以我使用call https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call方法,但是有问题。
function foo() {
this.bar = function() {
console.log("keep going");
window.setTimeout.call(this,this.bar,100);
}
this.bar();
}
new foo;
在 Firefox 下,这只会向控制台打印 1 行,然后什么也没有,而在 google chrome 下,它会抛出一个TypeError https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/TypeError.
我的代码有什么问题?
Using call
在这里没有帮助:它调用setTimeout
和你的this
对象,但回调函数本身仍然是从全局范围调用的。你真正想做的是这样的:
function foo() {
var self = this;
this.bar = function() {
console.log("keep going");
window.setTimeout(function() { self.bar(); }, 100);
}
this.bar();
}
Edit:如果你真的想要类似的东西call
方法,你可以使用bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind这绑定了this
函数的值:
window.setTimeout(this.bar.bind(this), 100);
然而,这是新的 ECMAScript 5 规范的一部分,尚未得到所有浏览器的支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)