Javascript 将函数复制回从字符串解析的对象

Javascript 将函数复制回从字符串解析的对象,javascript,function,object,Javascript,Function,Object,我使用JSON.stringy将复杂对象转换为字符串,以便保存、加载并解析回对象 但是,这将从经过字符串化然后解析的原始对象中删除所有函数。我知道我可以使用Object.assign创建一个具有所需函数的新对象,然后将属性从解析节点复制到具有所需函数的对象中 myNode=Object.assign(new GrapNode(), parsedNode); 当这起作用时,myNode!==parsedNode,因为它们是不同的对象实例。是否有一种优雅的/cannonical方法可以在不创建新对

我使用JSON.stringy将复杂对象转换为字符串,以便保存、加载并解析回对象

但是,这将从经过字符串化然后解析的原始对象中删除所有函数。我知道我可以使用Object.assign创建一个具有所需函数的新对象,然后将属性从解析节点复制到具有所需函数的对象中

myNode=Object.assign(new GrapNode(), parsedNode);
当这起作用时,myNode!==parsedNode,因为它们是不同的对象实例。是否有一种优雅的/cannonical方法可以在不创建新对象的情况下将类GraphNode中的所有GraphNode.prototype函数获取到parsedNode中


注意*GraphNode是我定义的一个类。

可以手动将
GraphNode
中的方法分配到
parsedNode

function copyNode(target, proto) {
  Object.keys(proto).forEach(k => {
    if(typeof proto[k] == 'function') {
      target[k] = proto[k];
    }
  });
}

copyNode(parsedNode, new GrepNode());

可以手动将
GrapNode
中的方法分配到
parsedNode

function copyNode(target, proto) {
  Object.keys(proto).forEach(k => {
    if(typeof proto[k] == 'function') {
      target[k] = proto[k];
    }
  });
}

copyNode(parsedNode, new GrepNode());

只需复制原型:

Object.setPrototypeOf(parsedNode, GraphNode);

只需复制原型:

Object.setPrototypeOf(parsedNode, GraphNode);


Doing
myNode=Object.assign(parsedNode,newgrapnode())
将保留引用,但
parsedNode
中的值可能会被GraphNode null值覆盖。我想一个解决方案是循环使用GraphNode键,并将类型为
function
的键分配给
parsedNode
。不确定它是否优雅,但应该可以工作。函数是直接在
GrapNode()
对象中,还是从原型中继承的?@Thiago Loddi但这是否意味着GraphNode的每个实例(可能有很多实例)现在都有自己的函数副本,而这些函数的副本成本高昂且内存缓慢?创建类时,实例从GraphNode.prototype中获取函数。@Barmar继承自prototype,我假设是因为我使用了ES6样式的类来定义构造函数、属性和函数。Doing
myNode=Object.assign(parsedNode,new GrapNode())
将保留引用,但
parsedNode
中的值可能会被GraphNode null值覆盖。我想一个解决方案是循环使用GraphNode键,并将类型为
function
的键分配给
parsedNode
。不确定它是否优雅,但应该可以工作。函数是直接在
GrapNode()
对象中,还是从原型中继承的?@Thiago Loddi但这是否意味着GraphNode的每个实例(可能有很多实例)现在都有自己的函数副本,而这些函数的副本成本高昂且内存缓慢?创建类时,实例从GraphNode.prototype获取函数。@我认为Barmar继承自prototype,因为我使用了ES6样式的类来定义构造函数、属性和函数。我现在正在尝试这一个。是的,这一个有效。谢谢你让我知道这个函数。然而,MDN webdocs上的警告有点令人担忧。这是按照,UP设置对象原型的标准方法。@AndrewS不必担心警告,除非你在内部循环中经常这样做。我现在正在尝试这个。是的,这个很有效。谢谢你让我知道这个函数。但是,MDN webdocs上的警告有点令人担忧。这是根据,向上。@AndrewS不要担心警告,除非你在内部循环中经常这样做。我给你一分是因为我相信这是另一个可信的选择,我要感谢你的回答。我给你一分是因为我相信这是另一个可信的选择,我要感谢你的回答。