2016-10-18 22 views
0

私はio.on()関数内にソケットオブジェクトを与える関数を持っています。しかし、私はsocket.on関数内のオブジェクトに新しいプロパティを与えるしようとすると、私はsocket.on関数の外でプロパティを使用することができません。 コンソールが私に示して、この - 私はまた、対象外のプロパティを使用する方法を知りたい外部スコープから外部オブジェクトにプロパティを追加できませんか?

roomName 
#undefined 

io.on("connection", function(socket) { 
 
\t socket.on("join_group", function(user, roomnum) { 
 
\t \t socket.userName = user; 
 
\t \t socket.selfRoom = roomnum; 
 
\t \t socket.join(roomnum); 
 
\t \t console.log(socket.selfRoom); 
 
\t }); 
 
    socket.on("msg", function() { 
 
\t console.log("#" + socket.selfRoom); 
 
    }); 
 
});

答えて

1

私は私は、オブジェクトの外にプロパティを使用する方法を知りたいです。

コールバック関数の外部オブジェクトsocketにプロパティを設定すると、onイベントになります。

しかし、onイベントハンドラが呼び出されるまでには、console.log("#" + socket.selfRoom);のステートメントはすでに実行されています。

イベントハンドラsocket.on("join_group", function(user, roomnum) {を定義

  • は、このイベントハンドラ(コールバックメソッド)が呼び出されていると同じではないことに注意してください。

  • JavaScriptがイベントループモデル上のシングルスレッドと仕事なので、イベントが発生したときに、このイベントハンドラは、現在のタスク+タスクの後に実行されますイベントループキューに行ってきましたすでにキューに入っています

+0

申し訳ありませんが、私は私の質問を編集しました。見てください。私は実際に、他の関数の内側から外側のオブジェクトにプロパティを追加する方法を知りたかったので、それらのプロパティは関数の範囲に限定されません。 –

+0

@DhruvChadha関数のスコープに限定されず、同じオブジェクトのみに設定されます。 – gurvinder372

+0

それでは、#undefinedとなっているのはなぜですか(編集したコードを見てください)? –

関連する問題