2012-01-16 6 views
0
io.sockets.on('connection', function (socket) {     
    socket.on('requestGame', function (data) { 

    for (var game in games) 
     if (game.player2 === undefined) { 
      game.player2 = socket; 
      socket.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // works 
      game.player2.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // doesn't work 

なぜこれらの線のうちの1つは、他の線は動作しないのですか?ここSocket.ioソケットハンドル

はエラーBのキーによる

game.player2.emit('gameStart', { game_id: game.game_id, turn: !game.p1_tur 
      ^
TypeError: Cannot call method 'emit' of undefined 
+0

でしたか? – oli

+0

は未定義であり、その後にソケットオブジェクトをログすると、期待通りです。それはちょうど起こっていない操作のようです。 – mlihp

答えて

1

for (var a in b)構文を反復処理です。ループを実行するたびに、aは文字列になり、おそらく探していたbの値ではありません。

文字列とリテラルであるため、プロパティをアタッチするとすぐには影響はありません。 Javascriptでは文字列や数字などのリテラルは変更できません。あなたはおそらく行うには何を意味するのか

'hello'.foo = 'world'; 
console.log('hello'.foo); // undefined 
var str = 'hello'; 
str.foo = 'world'; 
console.log(str.foo); // undefined 

あなたは(game.player2を)にconsole.log場合は、あなたがオブジェクトに添付何方法を参照ください

for (var key in games) 
     var game = games[key]; 
     if (game.player2 === undefined) { 
      game.player2 = socket; 
      socket.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // works 
      game.player2.emit('gameStart', { game_id: game.game_id, turn: !p1_turn }); // doesn't work 
+0

本当にありがとう! – mlihp