当前位置: 首页 > 知识库问答 >
问题:

我发现很难在Javascript中克隆一个对象[closed]

宋建本
2023-03-14

我有一个web应用程序,用户可以点击按钮来复制引擎对象。

我用Javascript编写了下面的方法,它工作了。但是,如果有2个或3个以上的用户在克隆,就会弹出随机错误。例如,它会说,engine is undefinedenginetoclone is undefined

但如果只有一个人在做,它就永远不会有错误。

所以我在想,有没有更好的写法:

    var engineToClone = this.model;

    var clonedEngine = new Engine({
        factoryId: engineToClone.attributes.factoryId,
        title: 'CLONED OF - ' + engineToClone.attributes.title,
        engineDescription: engineToClone.attributes.engineDescription,
        isFrontend: engineToClone.attributes.isFrontend,
        cylinders: engineToClone.cylinders,
        headers: engineToClone.headers,
        vehicles: engineToClone.vehicles,
        pistons: engineToClone.pistons,
        fuels: engineToClone.fuels
    });
    
    clonedEngine.save(null, {
        url: self.factory.url()
    }).done(function () {
    });

我尝试过这样做,但它生成空值:

    var engineToClone = this.model;

    var clonedEngine = engineToClone;
JSON.parse(JSON.stringify(engineToClone))

所以我一定是做错了什么,我希望有人能给我指明正确的方向。

谢谢!

共有1个答案

夹谷志
2023-03-14

奇怪的是json没有定义,但使用object.assign()还有另一种解决方案。基本上,它从原始对象获取每个属性,并将其复制到{}上。

const myObject = {
  some: "properties",
  that: "could",
  be: "cloned",
}

let clone = Object.assign({}, myObject);

myObject.x = 
  "the original was edited... what happens to the clone?";

console.log(clone);
 类似资料:
  • 假设我有这门课: 以及子类: 我知道这是不可能的,但我想你明白我想要什么。如果Foobar实现了Cloneable,并且没有扩展AbstractFoo,那么子类就可以工作。我想我想要但不允许的是: 如果Foobar实现了Cloneable,并且没有扩展AbstractFoo,那么子类就可以工作。 除了扩展的抽象类,我怎么能做到“相同”?

  • 问题内容: 在node.js中克隆对象的最佳方法是什么 例如,我想避免以下情况: 该对象很可能包含复杂的类型作为属性,因此简单的for(var1 in obj1)无法解决。我需要自己编写一个递归克隆吗,还是内置了一些我看不到的东西? 问题答案: 可能性1 简洁的深层副本: 可能性2(已弃用) 注意: 现在,Node.js文档中将该解决方案标记为不推荐使用: 从未打算在内部Node.js模块之外使用

  • 我有一个平面JS对象: 我想克隆除一个元素以外的对象: 最简单的方法是什么(如果可能的话更倾向于使用ES6/7)?

  • 问题内容: 将变量分配给另一个变量会将引用复制到同一实例。这意味着更改一个将更改另一个。 我实际上如何克隆或复制实例? 问题答案: 使用Date对象的方法,该方法返回自1970年1月1日00:00:00纪元时间以来的毫秒数: 在Safari 4中,您还可以编写: …但是我不确定这是否可以在其他浏览器中使用。(似乎可以在IE8中使用)。

  • 本文向大家介绍如何实现对象克隆?相关面试题,主要包含被问及如何实现对象克隆?时的应答技巧和注意事项,需要的朋友参考一下 实现 Cloneable 接口并重写 Object 类中的 clone() 方法。 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

  • 问题内容: 我有一个物体。我想将其复制为对象,这样更改就不会修改。我意识到,复制从内置JavaScript对象派生的对象将导致额外的不需要的属性。这不是问题,因为我正在复制自己的文字构造对象之一。 如何正确克隆JavaScript对象? 问题答案: 在JavaScript中对任何对象执行此操作都不是简单或直接的。您将遇到错误地从对象的原型中获取应该留在原型中而不应复制到新实例的属性的问题。例如,如