2011-10-22 11 views
0

似たようなトピックのように見える他の質問がありますが、私の特定の問題で私を助ける答えはありません。私はsetTimeoutsetInterval関数の周りに構築されたJavaScriptでスレッドライブラリを作成しました。これは非常にうまく動作しますが、私のスレッドライブラリではスレッドの名前がスレッドのものであることが必要です。つまり、スレッドをインスタンス化するときに、このように見えます。これまたは自己参照からvar名を取得するjavascript

t = new Thread(payload, "t") 

ペイロードは、実行のチャンスを得たときにスレッドが行うことを定義するオブジェクトです。これにより、基本スレッド「配管」からスレッドのタスクを抽象化することができます。いずれにしても、setTimeoutsetIntervalがJavaScriptコマンドを文字列として受け取るので、スレッドの名前を渡す必要があるという私の問題setTimeout("doStuff", 0)。より多くのアプリケーションで私のスレッドライブラリを使用すると、スレッドに名前を渡すことはもっと苦痛になっています。

var myThreadName = this.someMagicFunction(); 

または

var myThreadName = someMagicFunction(this); 

または他のいくつかの素晴らしい方法は、誰がどんな考えを持っている場合:だから私はこのようなスレッドクラス内からスレッドの名前を取得することによってこの問題を回避できるようにしたいと思います私にとって私は最も感謝しています。

答えて

3

実際には、両方とも最初のパラメータとして機能することができます(文字列のバージョンはevalなので)これが推奨されます。 Threadオブジェクトがどのように見えるかによって

setTimeout(function(){ 
    t.payload(); 
}, 0); 

:あなたのケースでは

setTimeout(doStuff, 0); 

、あなたのような何かを行うことができるかもしれません。

MDCドキュメント(setTimeoutsetInterval)を参照してください。

あなたがいる限り、それは引数なしのあるよう setTimeoutに関数を渡すことができ
+0

魅力的な働きをしてくれてありがとう。私はsetTimeout(doStuff()、1)を行っていたので、私は前にトラブルに遭遇していました。関数を名前で渡すと完全に動作します。もう一度、助けてくれてありがとう。 – Overfloater

+0

@Overfloater、問題ありません。あなたの質問に答えた場合は、チェックマークをクリックして受け入れてください。 –

0

、すなわち

function takeme() 
{ 
    alert('workin?'); 
} 

setTimeout(takeme, 100); 

とそうでない場合は、しかし、あなたが本当に必要な場合は

function takeme(x) 
{ 
    alert(x); 
} 
var test = 1; 
setTimeout(function(){ takeme(test); }, 100); 

を試すことができます関数名を抽出するには、this postを参照してください。厳密に同じではありませんが、やや関連しています。

関連する問題