0

いくつかの関数を定義した名前空間オブジェクトがあります。関数の1つは、リモートサーバーへのWebSocketセッションを作成するために使用されます。

ns.Session = function(url, config, callback){
   var ws = new WebSocket(url);
   ws.onmessage = function (e){
       if(login(e.data)){
           // This is the point at which I need to pass back the session object to callback
           callback(session):
       }
   }
   ....
}

Javascriptでは、誰かがこの関数を使用して呼び出すかどうかを知る限りns.Session(....)thisオブジェクトはnsになります。では、「セッション」のインスタンスを取得してコールバックに送信するにはどうすればよいですか。
arguments.callee私の知る限り、非推奨です。

私がこのようにしている理由は、サーバーがログインを確認するまでセッションが「使用可能」と見なされないため、実際に接続してログインする前に関数オブジェクトを時期尚早に返したくないからです。コールバックの。これを達成するためのより良い方法があれば、私もそれを受け入れます。

セッションには、簡潔にするためにここでは示していないaddHandler、などの他の内部関数がたくさんあります。sendData

4

1 に答える 1

5

次のように関数へのポインターを使用できます。

ns.Session = function session(...) {
    // 'session' here points to your function, so you do
    callback(session); // like you wrote
    callback(ns.Session); // same effect if you don't change ns and ns.Session pointers
}

また、関数にはインスタンスが 1 つしかないため、この場合に「インスタンス」という言葉を使用する理由がわかりません。「new」キーワードで呼び出すと、関数は関数から新しいオブジェクトを作成し、「インスタンス」単語を使用できるようになりました。

于 2013-01-23T21:50:08.603 に答える