Javascript 对象中包含类实例的数组的硬拷贝

Javascript 对象中包含类实例的数组的硬拷贝,javascript,class,object,Javascript,Class,Object,我正在创建一个多层次的简单游戏。每个级别由键值对的对象表示。在每个级别中,还有一个数组,其中包含将在该级别中加载的类的新实例。到目前为止,它运行良好,但当我实现重启按钮时,程序无法再次加载这些实例,因为我已经更改了它们。所以我需要将这些实例硬拷贝到级别,当你们按下重启按钮时,你们可以再次硬拷贝它们 这是我的level对象的一个示例 const level4 ={ width:window.innerWidth, height:window.innerHeight, gates:[new G

我正在创建一个多层次的简单游戏。每个级别由键值对的对象表示。在每个级别中,还有一个数组,其中包含将在该级别中加载的类的新实例。到目前为止,它运行良好,但当我实现重启按钮时,程序无法再次加载这些实例,因为我已经更改了它们。所以我需要将这些实例硬拷贝到级别,当你们按下重启按钮时,你们可以再次硬拷贝它们

这是我的level对象的一个示例

const level4 ={
 width:window.innerWidth,
 height:window.innerHeight,
 gates:[new Gate(canvas.width-20, 100,0,-2), new Gate(200, 15,4,-1)],
 blocks:[new Block(50,100,0, 0, 50, 1, 2), new Block(200,200,0, 0, 50, 1, 1)],
 difficulty:'easy',
 id:4
};
我已经尝试用这个解析函数硬拷贝对象,但它不起作用

const parseLevel = (currentLevel) =>{
  return {
    width: currentLevel.width,
    height: currentLevel.height,
    gates: parseObjects(currentLevel.gates),
    blocks: parseObjects(currentLevel.blocks),
    difficulty: currentLevel.difficulty,
    id: currentLevel.id
  };
};

const parseObjects = (array) =>{
  let newArray = [];
  for(let i of array){
  let newObj = Object.assign( Object.create( Object.getPrototypeOf(i)),i);
  newArray.push(newObj);
  }
return newArray;
};
在我的函数中,我正在加载我调用的级别:

 level = parseLevel(level4);
看一看

我不知道你的门和块对象内部是如何构造的。它们可能具有无法硬拷贝的嵌套对象

var k={a:b,c:{d:c}; var j=Object.assign Object.create Object.getPrototypeOfk,k; console.logj==k //假的 console.logk.c==j.c //真的看看

我不知道你的门和块对象内部是如何构造的。它们可能具有无法硬拷贝的嵌套对象

var k={a:b,c:{d:c}; var j=Object.assign Object.create Object.getPrototypeOfk,k; console.logj==k //假的 console.logk.c==j.c
//真的我认为简单的解决方法是将level4从常数转换为函数。这样,您可以多次调用它,并始终获得一个新实例

const level4 = () => ({
  width: window.innerWidth,
  height: window.innerHeight,
  gates:[
    new Gate(canvas.width-20, 100,0,-2), 
    new Gate(200, 15,4,-1)
  ],
  blocks:[
    new Block(50,100,0, 0, 50, 1, 2), 
    new Block(200,200,0, 0, 50, 1, 1)
  ],
  difficulty: 'easy',
  id: 4
});

我认为简单的解决方案是将level4从常量转换为函数。这样,您可以多次调用它,并始终获得一个新实例

const level4 = () => ({
  width: window.innerWidth,
  height: window.innerHeight,
  gates:[
    new Gate(canvas.width-20, 100,0,-2), 
    new Gate(200, 15,4,-1)
  ],
  blocks:[
    new Block(50,100,0, 0, 50, 1, 2), 
    new Block(200,200,0, 0, 50, 1, 1)
  ],
  difficulty: 'easy',
  id: 4
});

我不能使用JSON,因为我的类有很多方法。类的结构是很少的属性和方法。我不能使用JSON,因为我的类有很多方法。类的结构是很少的属性和方法。我花了最后一个小时来解决所有的问题,当我将我的级别重新编写为函数时,但它仍然有效。谢谢你,伙计。我花了最后一个小时来解决所有的问题,当我将我的关卡重新设置为功能时,但它仍在工作。谢谢你,伙计。