首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否将正确的"this“上下文传递给setTimeout回调?

是否将正确的"this“上下文传递给setTimeout回调?
EN

Stack Overflow用户
提问于 2010-01-25 12:44:21
回答 4查看 219.3K关注 0票数 288

如何将上下文传递到setTimeout?我想在1000毫秒后调用this.tip.destroy(),如果是this.options.destroyOnHide。我该怎么做呢?

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }, 1000);
} 

当我尝试上面的操作时,this引用的是窗口。

EN

回答 4

Stack Overflow用户

发布于 2012-02-16 01:36:00

在Internet Explorer以外的浏览器中,您可以在延迟后将参数一起传递给函数:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);

所以,你可以这样做:

var timeoutID = window.setTimeout(function (self) {
  console.log(self); 
}, 500, this);

就性能而言,这比作用域查找(将this缓存到超时/间隔表达式之外的变量中),然后创建闭包(通过使用$.proxyFunction.prototype.bind)要好。

使其在来自Webreflection的IE中工作的代码

/*@cc_on
(function (modifierFn) {
  // you have to invoke it as `window`'s property so, `window.setTimeout`
  window.setTimeout = modifierFn(window.setTimeout);
  window.setInterval = modifierFn(window.setInterval);
})(function (originalTimerFn) {
    return function (callback, timeout){
      var args = [].slice.call(arguments, 2);
      return originalTimerFn(function () { 
        callback.apply(this, args) 
      }, timeout);
    }
});
@*/
票数 31
EN

Stack Overflow用户

发布于 2014-05-26 20:19:39

注意:这在IE中不起作用

var ob = {
    p: "ob.p"
}

var p = "window.p";

setTimeout(function(){
    console.log(this.p); // will print "window.p"
},1000); 

setTimeout(function(){
    console.log(this.p); // will print "ob.p"
}.bind(ob),1000);
票数 5
EN

Stack Overflow用户

发布于 2012-10-21 01:18:16

如果你使用的是underscore,你可以使用bind

例如。

if (this.options.destroyOnHide) {
     setTimeout(_.bind(this.tip.destroy, this), 1000);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2130241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档