Object中的JavaScript setTimeout

时间:2012-12-30 23:14:54

标签: javascript settimeout

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

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版本的问题。 THX

3 个答案:

答案 0 :(得分:5)

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);
    }
}

答案 1 :(得分:1)

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

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

正如您所知,this可能没有达到您所期望的效果。将destroyMe(this)替换为console.log("dd")会导致您期望的行为。

答案 2 :(得分:0)

setTimeout要么进行回调(函数,而不是带参数的函数调用)或引号中的代码。但是,正如this question中所述,只允许传递字符串是出于历史原因 - 在实践中没有任何充分的理由。

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

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