Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 创建新对象,而不是引用_Javascript - Fatal编程技术网

Javascript 创建新对象,而不是引用

Javascript 创建新对象,而不是引用,javascript,Javascript,这是我第一次来这里 所以问题是,我有一个对象,它包含所有变量,如下所示: app.Variables = { var1: 0, var2: 0, var3: 0 } app.Defaults = app.Variables app.Variables.var1++ 我想将这些值存储在一个名为Defaults的对象中,如下所示: app.Variables = { var1: 0, var2: 0, var3: 0 } app.Default

这是我第一次来这里

所以问题是,我有一个对象,它包含所有变量,如下所示:

app.Variables = {
    var1: 0,
    var2: 0,
    var3: 0
}
app.Defaults = app.Variables
app.Variables.var1++
我想将这些值存储在一个名为Defaults的对象中,如下所示:

app.Variables = {
    var1: 0,
    var2: 0,
    var3: 0
}
app.Defaults = app.Variables
app.Variables.var1++
但现在的问题是,在我的代码中,app.Variables.var1例如,按如下方式递增:

app.Variables = {
    var1: 0,
    var2: 0,
    var3: 0
}
app.Defaults = app.Variables
app.Variables.var1++
这意味着app.Defaults.var1的增量也等于app.Variables.var1


这里我该怎么办?

最简单的版本是使用
JSON.parse/stringify
,最快的版本是使用纯克隆方法:

/* simplest */
var clone = JSON.parse(JSON.stringify(obj));

/* fastest */
function clone(obj) {
    if (obj == null ||typeof obj != "object") return obj;
    var copy = obj.constructor();
    for (var attr in obj) {
        if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
    }
    return copy;
}
var clone2 = clone(obj);

您可以编写一个深度克隆方法,将对象的每个属性的每个值复制到一个新的值

注意:我扩展了Object.prototype以避免类型检查,并且为了简单起见,如果您对它不满意,可以更改它

示例输出和a

var first = {
  var1:0,
  var2:0
  var3:0
};
var second = first.clone(Infinity);
first.var1++;
console.log (first.var1,second.var1,second); //1 , 0
要将此应用于代码,只需克隆对象
app.Defaults=app.Variables.clone()


第一个论点是深度。如果省略,则只克隆第一级,在这种情况下就足够了。

您应该执行[深度克隆][1][1]:相关:,。查看此线程,您可以使用jQuery.extend()或下划线的
\ucode>@flav yah,感谢您指出out.thx的所有问题:)我使用了最简单的版本,它可以工作:)稍后在我的代码中,对象以相同的方式被克隆回来