我疯了吗?
我正在尝试克隆一个对象,然后从中删除一个元素,但它也会从初始对象中删除。我觉得我不再理解生活!
var obj1 = {
'name' : 'bob',
'hair' : 'brown'
}
var obj2 = obj1;
delete obj2.hair;
这个删除的obj1.hair。怎么样?什么?为什么呢?
答案 0 :(得分:0)
var obj2 = obj1;
不会克隆该对象。它只是使第二个变量指向完全相同的对象。在Javascript中,对象是通过引用(而不是通过副本)分配的。因此,两个变量都指向唯一的对象。
如果你真的想要克隆,那么你必须实际克隆。这不是Javascript语言内置的功能,但您可以构建克隆功能。那里有很多。
一些参考文献:
What is the most efficient way to deep clone an object in JavaScript?
How do I correctly clone a JavaScript object?
What is the most efficient way to deep clone an object in JavaScript?
答案 1 :(得分:0)
obj2
和obj1
指的是同一个对象。您需要clone
或new
对具有相似值的对象的两个不同引用。
function Obj(name, hairColor){
this.name = name;
this.hair = hairColor;
};
var obj1 = new Obj('bob', 'brown');
var obj2 = new Obj('bob', 'brown');
delete obj2.hair;
Another alternative,如果定义如上所述的Obj
函数,则不可行,就是编写一个循环于对象属性的函数,并返回一个具有相同值的新对象。 / p>
答案 2 :(得分:0)
function clone(obj) {
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
temp[key] = clone(obj[key]);
}
}
return temp;
}
用法
var obj1 = {
'name' : 'bob',
'hair' : 'brown'
}
var obj2 = clone(obj1);
所有信用都在这里https://stackoverflow.com/a/122190/1564365
(回答这个问题,我觉得很蠢。)