0

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

array = [];

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

array.push(object);

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

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

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

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

4

3 回答 3

6

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);
    }
}
于 2012-12-30T23:18:14.743 回答
1

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

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

正如您已经知道的那样,this可能不会像您期望的那样做。替换destroyMe(this)console.log("dd")应该会导致您期望的行为。

于 2012-12-30T23:18:44.970 回答
0

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

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

var object = {
    'name' : 'user',
    'limit' : function() {
               setTimeout('console.log("dd")', 3000);
            }
}
于 2012-12-30T23:23:05.070 回答