我試圖從一個客戶端傳遞對象到另一個客戶端,例如棋子在多人棋盤遊戲中。我有一個使用JSON.parser
和__proto__
的工作解決方案,但我很想知道是否有更好的方法。如何在Socket.IO中通過JavaScript中的「新」對象
客戶端發送:
var my_piece = new BoardPiece();
// ... my_piece is assigned data, like x-y coordinates
socket.send(JSON.stringify(my_piece));
服務器轉發一塊給別人:
client.broadcast(piece);
另一個客戶端接收:
var your_piece = JSON.parse(json);
your_piece.__proto__ = BoardPiece.prototype; // provide access to BoardPiece's functions
這是最後一步,我使用__proto__
我」我擔心我可能會在腳下開槍自殺。有更好的建議嗎?
非常感謝。這一切都是有道理的,我可以看到這種方式可以讓你過濾掉你想要發送和接收的屬性。但是,就我而言,我想要所有對象的屬性。所以如果我正確理解你,我不應該實現toJSON,它會JSON化我所有的屬性。這意味着如果我更改BoardPiece中的屬性,我將只有重複的Create代碼。 – 2011-05-04 03:23:48
@BrentDaugherty你可以對整個對象進行jsonify,然後對for(var prop in obj){...}'循環對象並複製每個屬性。這個想法是你基本上增加了第二個構造函數,它接受另一個對象並創建一個克隆。這是OO中具有基於克隆的構造函數的常見構造。你甚至可以將它作爲構造函數的參數來處理,只能在那裏處理它。 – Raynos 2011-05-04 08:07:57