我试图从一个客户端传递对象到另一个客户端,例如棋子在多人棋盘游戏中。我有一个使用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