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コールバック (引数を伴う関数呼び出しではなく関数) または引用符で囲まれたコードを受け取ります。ただし、この質問に記載されているように、文字列を渡すことは歴史的な理由でのみ許可されています。実際にそれを行う正当な理由はありません。

ただし、完全を期すために、必要なことを行う1つの方法は次のとおりです。

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