为什么通过函数将KinectJS对象从客户端传递给NodeJS会导致类的丢失?
我正在使用KinectJS创build一个Kinect.Rect对象。 我试图将这个对象从客户端传递到服务器。 在客户端(就在作为parameter passing之前,控制台中对象的输出是:
box_284 Kinetic.Rect alpha: 1 centerOffset: Object className: "Shape" drag: Object drawFunc: function (){ eventListeners: Object fill: "00D2FF" height: 25 isListening: true name: undefined rotation: 0 scale: Object stroke: "black" strokeWidth: 4 visible: true width: 25 x: 100 y: 100 __proto__: Object
发送后是:
box Object alpha: 1 centerOffset: Object className: "Shape" drag: Object eventListeners: Object fill: "00D2FF" height: 25 isListening: true rotation: 0 scale: Object stroke: "black" strokeWidth: 4 visible: true width: 25 x: 100 y: 100 __proto__: Object
KinectJS库可供客户使用,这是“深度克隆”问题以及对象如何通过的问题? 服务器没有可用的库是否是一个问题? 不知道怎么想这个..相当新的Javascript。
===============
更新
我发送的论点如下:
socket.emit('add_box', eval("box_" + id));
对象是这样的:box_523
首先,我build议你可以通过数组或字典来访问对象,而不是使用eval("box_" + id)
。 如果不考虑任何潜在的安全问题,索引到一个数组将会给你比eval
更好的性能。
为了解决你的问题,问题是socket.emit
序列化和传输数据。 由于drawFunc
是一个函数而不是数据,它不会被传输。
如果你仔细想想,这是相当直接的行为。 如果您通过电线移动function,预期的行为是什么? 它会在哪里执行? 你会传输实际的JavaScript,然后在服务器上评估它吗?
虽然这些都是您可以回答和开发自己的解决scheme的所有问题,但它不是随处可用的东西。
也就是说,你可能想用nowjs来调用函数调用 。 这可能符合你的要求。 但是,它不会通过线路传输任何代码:
注意:代码只能在创build它的一面执行,这意味着函数的主体实际上并不是从客户端传输到服务器或服务器到客户端,而是在远程函数调用时只有一个垫片它是同步的。 这对于安全来说非常重要,因为这意味着在NowJS中永远不会执行任意代码