克隆一个JavaScript对象?

nev*_*ame 16 javascript

可能重复:
如何克隆js对象?

这是创建javascript对象的另一种方法(使用对象文字符号而不是函数):

user = {
  name: "Foo",
  email: "bar@baz.com"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法克隆这个对象还是单身?

Dag*_*bit 29

试试这个:

var clone = (function(){ 
  return function (obj) { Clone.prototype=obj; return new Clone() };
  function Clone(){}
}());
Run Code Online (Sandbox Code Playgroud)

这是正在发生的事情.

  • 克隆是一个虚拟构造函数.
  • 我们将要克隆的对象分配给Clone构造函数的原型.
  • 我们使用'new'调用Clone,因此构造的对象将原始对象作为其构造函数的原型(非标准)__proto__.

克隆的对象将共享原始对象的所有属性,而不会生成任何内容的任何副本.如果为克隆对象的属性分配了新值,则它们不会干扰原始对象.并且不需要篡改内置插件.

请记住,新创建的对象的对象属性将引用与克隆对象的同名属性相同的对象.为克隆的属性分配新值不会干扰原始属性,但会为克隆的对象属性赋值.


在chrome或firebug控制台中试试这个:

var user = {
  name: "Foo",
  email: "bar@baz.com"
}

var clonedUser = clone(user);

console.dir(clonedUser);
Run Code Online (Sandbox Code Playgroud)

可以在此处找到该克隆技术的详细说明.

  • `用户= {名: "",电子邮件: "",OBJ:{A: "A"}}; clonedUser = clone(user);`,`clonedUser.obj.a ="B";`你会发现`user.obj.a =="B"` (2认同)

Top*_*era 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
Run Code Online (Sandbox Code Playgroud)

jsfiddle看到.


编辑

如果您需要在旧版浏览器中使用此功能,请访问http://www.json.org/js.html.

  • 它实际上并不那么愚蠢...例如,如果您要为嵌入式系统创建应用程序,那么您始终知道它将运行的浏览器; 而且你知道它是一个数据对象(所以你不关心方法是否被克隆),那么这很容易,干净,安全.它不适用于所有应用程序,但它非常适合我想要的!谢谢! (6认同)