【问题标题】:JavaScript setTimeout in Object对象中的 JavaScript setTimeout
【发布时间】:2012-12-30 23:14:54
【问题描述】:

我试图给一个对象一个倒计时计时器,当倒计时结束时,它应该调用一个从数组中删除该对象的函数。

array = [];

var object = {
    'name' : 'user',
    'limit' : function() {
         setTimeout(destroyMe(this),10000);
    }
}

array.push(object);

var destroyMe = function(obj) {
    array.remove(obj);
}

我知道 this 可能有问题,但超时功能根本不起作用,甚至不像这样:

var object = {
    'name' : 'user',
    'limit' : function() {
               setTimeout(console.log("dd"),3000);
            }
}

也许有人可以告诉我 setTimeout 版本的问题。 谢谢

【问题讨论】:

  • [].remove?从来没有听说过。你需要做一个array[0].limit()来启动倒计时。

标签: javascript settimeout


【解决方案1】:

setTimeout 引用一个函数。您拥有的代码正在调用该函数。

这应该改为:

var object = 
{
    'name' : 'user',
    'limit' : function() 
    {
        setTimeout(function() { destroyMe(this); }, 10000);
    }
}

(在这种情况下使用this 可能会遇到问题,试试吧!)

var object = 
{
    'name' : 'user',
    'limit' : function() 
    {
        setTimeout( function() { console.log("dd"); },3000);
    }
}

【讨论】:

  • this 将是全局对象。他需要使用一些其他变量指向正确的对象。
  • 第一件事是第一件事,请在某处致电array[0].limit();
  • 我希望 Timout 函数会在 3 秒后调用自己!但是如果我使用上面的代码就不行!
  • @user1354743:只需将setTimeout 调用放在对象之后。
  • @user1354743 - 不,这行不通。您正在调用函数,而不是传递对函数的引用。
【解决方案2】:

您需要将函数传递给setTimeout,而不是函数调用。

var object = {
    'name' : 'user',
    'limit' : function() {
         setTimeout(function() { 
             destroyMe(this)
         }, 10000);
    }
};

如您所知,this 可能没有达到您的预期。将 destroyMe(this) 替换为 console.log("dd") 应该会产生您所期望的行为。

【讨论】:

    【解决方案3】:

    setTimeout 接受回调(一个函数,而不是带参数的函数调用)或引号中的代码。但是,正如 this question 中所述,仅允许出于历史原因传递字符串 - 在实践中没有任何好的理由这样做。

    但是,为了完整起见,做你想做的事情的一种方法是:

    var object = {
        'name' : 'user',
        'limit' : function() {
                   setTimeout('console.log("dd")', 3000);
                }
    }
    

    【讨论】:

    • 请不要建议传递字符串。曾经。没有一个可以接受的理由来传递字符串而不是函数。除此之外,他还需要保留this
    • 如果提到字符串传递,您必须 IMO 还警告说这是一种非常糟糕的做事方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多