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的所有问题:)我使用了最简单的版本,它可以工作:)稍后在我的代码中,对象以相同的方式被克隆回来