我试图给一个对象一个倒数计时器,当倒计时结束时,它应该调用一个从数组中删除该对象的函数。
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
答案 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);
}
}