我正在尝试将对象从一个客户端传递到另一个客户端,例如多人棋盘游戏中的棋子。我有一个使用JSON.parser
和__proto__
的工作解决方案,但我很想知道是否有更好的方法。
客户发送:
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__
的最后一步,我担心我可能会在脚下拍摄自己。有更好的建议吗?
答案 0 :(得分:8)
// clientone.js
var piece = new BoardPiece();
// ...
socket.send(JSON.stringify(piece));
// clienttwo.js
var piece = BoardPiece.Create(JSON.parse(json));
...
// BoardPiece.js
function BoardPiece() {
}
BoardPiece.prototype.toJSON = function() {
var data = {};
data.foo = this.foo;
...
return data;
};
BoardPiece.Create = function(data) {
var piece = new BoardPiece();
piece.foo = data.foo;
...
return piece;
}
首先在对象上使用toJSON
方法,{}允许JSON.stringify
立即将您的对象转换为JSON。这是JSON API的一部分。 JSON API将调用toJSON
方法(如果存在)并将该对象转换为JSON。
这基本上允许您根据需要序列化对象。
第二部分是添加一个工厂方法作为构造函数的属性,它接受序列化的JSON数据并创建一个新的元件。然后它会将您的序列化数据注入该板块对象。
因此,您只序列化您关心的数据,然后通过工厂方法传递该数据。这是将自定义对象从一个客户端发送到另一个客户端的最佳方式。
答案 1 :(得分:3)
节点有很多对象同步项目可能会让生活更轻松。首先,请查看:
答案 2 :(得分:0)
您是否尝试过jQuery $ .extend()方法? http://api.jquery.com/jQuery.extend/