Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象发送到另一台服务器而不转换为JSON_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 将对象发送到另一台服务器而不转换为JSON

Javascript 将对象发送到另一台服务器而不转换为JSON,javascript,ecmascript-6,Javascript,Ecmascript 6,比如说,我有一门课是这样的: var block = class { constructor(val1, val2) { this.value1 = val1; this.value2 = val2; } } 我想将此类的实例从一台服务器发送到另一台服务器。我通常会在将其发送到另一台服务器之前通过JSON.stringify(),然后在它到达另一台服务器之后通过JSON.parse()。然而,这将涉及将其转换为JSON,并且它将不再是“block

比如说,我有一门课是这样的:

var block = class {
    constructor(val1, val2) {
        this.value1 = val1;
        this.value2 = val2;
    }
}
我想将此类的实例从一台服务器发送到另一台服务器。我通常会在将其发送到另一台服务器之前通过
JSON.stringify()
,然后在它到达另一台服务器之后通过
JSON.parse()
。然而,这将涉及将其转换为JSON,并且它将不再是“block”类的实例


如果我想以一种保持它作为“block”类实例的方式发送它,那么最好的做法是什么

您在这里要求的是一种RPC(远程过程调用)

我认为您这样做是正确的,当您在服务器端反序列化对象时,您可以重用在客户端使用的类

使用示例类块,我在这里添加了一个名为display的方法,。这里的便利之处在于,在发送JSON后,显示器将在两台服务器上工作

显然,在这里的SO代码片段中,显示服务器到服务器的通信有点尴尬,但我所做的是保存到一个字符串中,然后从该字符串中重新生成同一个类,这正是执行RPC时所做的

当然,您可以扩展它,这样即使是类名也会被发送,这用于重新生成对象,这样它就可以发送很多类型的RPC命令

var block=class{
构造器(val1、val2){
此值为1.value1=val1;
this.value2=val2;
}
显示(){
console.log(this.value1,this.value2);
}
}
var b1=新区块(1,2);
b1.显示();
//让我们假设我们的流是通过网络发送的
var stream=JSON.stringify(b1);
var b2=新块();
assign(b2,JSON.parse(stream));

b2.显示()无法发送对象的可能副本,您需要做的是在另一端创建类,您可以使用
对象。分配
重新复制回属性与发送数据相比,这里仍然没有开销,。。在这里进行微优化,而不是简单易读的代码是在浪费您的时间。如果在服务器端重新序列化到相同的对象类是有意义的,那么就这样做。@DanielPahor,正如其他人提到的那样。一个小信息是,HTTP仅适用于字符串表示。您必须编写一个映射器,以根据字符串生成对象,就像Jackson在JAVA中所做的那样。顺便说一句,它在Javascript服务器上应该相当容易,因为它们支持即时的JSON。传输由带有代码、闭包和标识引用的函数组成的类既困难又低效。