我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.
如何正确克隆JavaScript对象?
我有一个包含大量数据的大对象.我想在其他变量中克隆它.当我设置实例B的一些参数时,原始对象中的结果相同:
var obj = {a: 25, b: 50, c: 75};
var A = obj;
var B = obj;
A.a = 30;
B.a = 40;
alert(obj.a + " " + A.a + " " + B.a); // 40 40 40
Run Code Online (Sandbox Code Playgroud)
我的输出应该是25 30 40.任何想法?
编辑
感谢大家.我改变了破坏的代码,这是我的结果:
Object.prototype.clone = Array.prototype.clone = function()
{
if (Object.prototype.toString.call(this) === '[object Array]')
{
var clone = [];
for (var i=0; i<this.length; i++)
clone[i] = this[i].clone();
return clone;
}
else if (typeof(this)=="object")
{
var clone = {};
for …Run Code Online (Sandbox Code Playgroud) 我有一些关于在JavaScript中将变量设置为与另一个变量相等的问题。
假设我们创建一个对象,a然后设置b = a。
var a = {
fname: "Jon",
lname: "Smith",
age: 50
}
var b = a;
Run Code Online (Sandbox Code Playgroud)
我了解,如果更改,a的属性之一b也会更改,因为设置时b = a我们不会克隆a数据,而是创建对a数据的引用。例如,如果我们设置a.fname = "Sarah"的新值b.fname会"Sarah"。
如果a通过设置尝试“清除” a = {},则对象b将保持不变。我不明白为什么以这种方式操作对象会产生与第一个示例不同的结果。
我对以下情况也有疑问。
var x = 10;
var z = x;
Run Code Online (Sandbox Code Playgroud)
如果然后设置x = 20,则值z保持不变。根据我第一个问题中描述的行为,人们会认为的新值z将反映的新值x。有人可以解释一下我在这里缺少什么吗?
谢谢!