【发布时间】:2009-11-13 11:05:54
【问题描述】:
这让我感兴趣,纯粹是为了研究和个人发展。我有一组命名空间的函数/变量。
在 1 个函数内,我需要通过 setTimeout 调用另一个函数,但将范围保持在“this”。我有点挣扎,似乎无法在 setTimeout 运行时绑定它。
var foo = {
ads: ["foo","bar"],
timeDelay: 3,
loadAds: function() {
var al = this.ads.length;
if (!al)
return; // no ads
for(var i = 0; i < al; i++) {
setTimeout(function() {
this.scrollAd(this.ads[i]);
}.apply(this), this.timeDelay * 1000);
}
},
scrollAd: function(adBlock) {
console.log(adBlock);
}
};
};
.apply(this) 确实会在 console.log 输出正确的对象时更改范围,但它会立即运行该函数,然后在回调保持为空时出现异常/警告:
useless setTimeout call (missing quotes around argument?)
有没有一种优雅的方式来做到这一点?我知道我能做到
var _this = this;
并在匿名回调中引用_this。例如,在 mootools 中,我会改用 .bind(this)...
不,因为这涉及到动画,我不想在字符串周围使用" ",因为它需要被评估并且会影响性能......
【问题讨论】:
标签: javascript scope