JavaScript在对象中设置超时时间

JavaScript setTimeout in Object

本文关键字:超时 时间 设置 对象 JavaScript      更新时间:2023-09-26

我试图给一个对象一个倒计时定时器,当倒计时下来,它应该调用一个函数,从数组中删除这个对象。

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

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

你需要传递一个函数setTimeout,而不是一个函数调用。

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

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

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

但是,为了完整起见,一种方法是:

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