【问题标题】:How to copy a JavaScript object? [duplicate]如何复制 JavaScript 对象? [复制]
【发布时间】:2014-05-07 12:57:40
【问题描述】:

我正在使用一个普通的 JavaScript 对象。我必须创建对象的精确副本才能进行更改:

var gRoll = {a:"pankaj",b:
{
a:"A",b:"c"
}} 

var copy = gRoll;
copy.a = "Karma";

这是在父对象中进行更改。请给我解决方案来创建对象的副本而不参考旧对象。与 OOPS 中的原型设计模式相同。

【问题讨论】:

标签: javascript jquery oop


【解决方案1】:

你用复制引用了同一个对象

var gRoll = {
    a:"pankaj",
    b:{a:"A",b:"c"}
}
var newObject = Object.create(gRoll);
newObject.a = 'Karma';

alert(gRoll.a); //pankaj
alert(newObject.a); //Karma

【讨论】:

  • 如果你改变 newObject 的成员,它会影响 gRoll:newObject.b.a="changed"; console.log(gRoll.b.a);//=changed 这是因为 Object.create 不会克隆,而是将 gRoll 设置为 newObject 的原型。更多关于它的工作原理:stackoverflow.com/a/16063711/1641941 在 JavaScript 中进行深层复制或克隆很复杂。
【解决方案2】:

您所做的不是创建副本,而是使用新变量引用现有对象,这就是问题所在。

如果您使用的是 jQuery,请使用其 extend() 方法复制现有对象...带有用于深度复制的可选参数。 http://api.jquery.com/jquery.extend/

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 2013-08-03
    • 2014-01-10
    • 1970-01-01
    • 2016-02-28
    • 2016-10-31
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多