3

我正在尝试将对象从一个客户端传递到另一个客户端,例如多人棋盘游戏中的棋子。我有一个使用JSON.parserand的工作解决方案__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__担心我可能会在脚上开枪。有更好的建议吗?

4

3 回答 3

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 数据并创建一个新的板件。然后它将您的序列化数据注入该板件对象。

因此,您只序列化您关心的数据,然后通过工厂方法传递该数据。这是将自定义对象从一个客户端发送到另一个客户端的最佳方式。

于 2011-05-03T16:29:52.460 回答
3

有一堆节点的对象同步项目可能会让生活更轻松。对于初学者,请查看:

于 2011-05-05T15:41:48.460 回答
0

你试过 jQuery 的 $.extend() 方法吗?http://api.jquery.com/jQuery.extend/

于 2011-05-03T08:43:58.247 回答