- 主题:Javascript怎么复制对象?
function foo(init) { this.name = init; }
var a = new foo('John');
var b, c;
b = c = a; // 这里似乎a b c都指向了同一个对象
b.name = 'Peter'; // 这句之后,c.name也是'Peter'
要怎样创建两个新的对象,并把它们的值都设置成和a一样呢?
--
FROM 134.134.139.*
没有特别好的方法
如果“对象”可以表示为json的话,可以用
obj = JSON.decode(JSON.encode(o));
【 在 dpblue (deep blue) 的大作中提到: 】
: function foo(init) { this.name = init; }
: var a = new foo('John');
: var b, c;
: ...................
--
修改:nimi FROM 180.184.97.*
FROM 180.184.97.*
找到了:
var b = JSON.parse(JSON.stringify(a));
var c = JSON.parse(JSON.stringify(a));
不过不是所有浏览器都支持的
【 在 dpblue (deep blue) 的大作中提到: 】
: 标 题: Javascript怎么复制对象?
: 发信站: 水木社区 (Thu Dec 12 09:58:49 2013), 站内
:
: function foo(init) { this.name = init; }
: var a = new foo('John');
: var b, c;
: b = c = a; // 这里似乎a b c都指向了同一个对象
: b.name = 'Peter'; // 这句之后,c.name也是'Peter'
:
: 要怎样创建两个新的对象,并把它们的值都设置成和a一样呢?
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 134.134.139.*]
--
FROM 134.134.139.*
只有IE6/7不支持,可以引入
https://github.com/douglascrockford/JSON-js这个lib解决
当然了,我们的做法是无视还在用ie6/7的用户
【 在 dpblue 的大作中提到: 】
: 找到了:
: var b = JSON.parse(JSON.stringify(a));
: var c = JSON.parse(JSON.stringify(a));
: ...................
--
FROM 211.144.202.*
如果有jQuery或者underscore的话
b=_.clone(a)
or b=$.extend({},a)
如果要深度拷贝的话,用b=$.extend(true, {}, a)
【 在 dpblue (deep blue) 的大作中提到: 】
: function foo(init) { this.name = init; }
: var a = new foo('John');
: var b, c;
: ...................
--
FROM 64.104.125.*