可能重复:
How to clone js object?
这是另一种创建javascript对象的方法(使用对象文字符号而不是函数):
user = {
name: "Foo",
email: "bar@baz.com"
}
有没有办法克隆这个对象还是单身?
答案 0 :(得分:29)
试试这个:
var clone = (function(){
return function (obj) { Clone.prototype=obj; return new Clone() };
function Clone(){}
}());
这是发生了什么。
__proto__
。克隆的对象将共享原始对象的所有属性,而不会复制任何内容。如果为克隆对象的属性分配了新值,则它们不会干扰原始对象。并且不需要篡改内置插件。
请记住,新创建的对象的对象属性将引用与克隆对象的同名属性相同的对象。为克隆的属性分配新值不会干扰原始属性,但会为克隆的对象属性赋值。
在chrome或firebug控制台中尝试此操作:
var user = {
name: "Foo",
email: "bar@baz.com"
}
var clonedUser = clone(user);
console.dir(clonedUser);
可以找到有关此克隆技术的详细说明here。
答案 1 :(得分:11)
您可以使用JSON对象(存在于现代浏览器中):
var user = {name: "Foo", email: "bar@baz.com" }
var user2 = JSON.parse(JSON.stringify(user))
user2.name = "Bar";
alert(user.name + " " + user2.name); // Foo Bar
见jsfiddle。
修改强>
如果您需要在旧版浏览器中使用此功能,请参阅http://www.json.org/js.html。
答案 2 :(得分:4)
我喜欢用这个:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
}
然后我要克隆的任何对象都可以完成:
user = {
name: "Foo",
email: "bar@baz.com"
};
var user2 = Object.create(user);
如(或类似)JavaScript The Good Parts
所示答案 3 :(得分:2)
大多数javascript框架都支持对象克隆。
var a= {'key':'value'};
var b= jQuery.extend( true, {}, a );
答案 4 :(得分:0)
Object.prototype.clone = function clone(obj) {
obj = obj || this;
var new_obj = {};
for( var p in obj ) {
if ( obj.hasOwnProperty(p) ) {
if( obj[p] !== null && typeof(obj[p]) === "object" ) {
new_obj[p] = clone( obj[p] );
}
else {
new_obj[p] = obj[p];
}
}
}
return new_obj;
};
/* Example */
var foo = {
name: "Foo"
, email: "bar@baz.com"
, obj: {a:"A",b:"B"}
};
var bar = foo.clone();
bar.name = "Bar";
bar.obj.b = "C";
// foo and bar should have a different 'name'
// foo and bar should retain the same email
// foo and bar should have different values for <foo/bar>['obj']['b']
// foo and bar should have the same values for <foo/bar>['obj']['a']
console.dir(foo);
console.dir(bar);