我疯了吗?JS克隆对象并删除元素
我想克隆一个对象然后从它删除一个元素,但它也从最初的对象中删除。我觉得我不再理解生活!
var obj1 = {
'name' : 'bob',
'hair' : 'brown'
}
var obj2 = obj1;
delete obj2.hair;
This delete's obj1.hair。怎么样?什么?为什么?
我疯了吗?JS克隆对象并删除元素
我想克隆一个对象然后从它删除一个元素,但它也从最初的对象中删除。我觉得我不再理解生活!
var obj1 = {
'name' : 'bob',
'hair' : 'brown'
}
var obj2 = obj1;
delete obj2.hair;
This delete's obj1.hair。怎么样?什么?为什么?
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?
添加到各种克隆函数的引用。 – jfriend00 2014-12-03 02:26:10
obj2
和obj1
指向同一个对象。您需要clone
it或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
功能,是不可行的,是编写遍历一个对象的属性,并返回具有相同的值的新对象的函数。
哦.. geeze。好的。我怎样才能快速做到这一点,以便我可以使用“新”? – user3822370 2014-12-03 02:24:13
搜索...多数民众赞成如何https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new – Kyslik 2014-12-03 02:24:57
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
(我觉得这么愚蠢回答这个问题。)
那不是 “克隆” – Kyslik 2014-12-03 02:22:41