use*_*727 19 javascript clone copy
我很迷惑.我创建一个副本myObjOne,比我删除一个条目myObjOne和JS删除我的副本(myObjTwo)中的条目呢?但为什么?
myObjOne = {};
myObjOne['name'] = 'xxx';
myObjOne['id'] = 'yyy';
myObjOne['plz'] = 'zzz';
// clone
myObjTwo = myObjOne;
// remove something
delete myObjOne['name'];
console.dir(myObjTwo);
Run Code Online (Sandbox Code Playgroud)
Nar*_*ala 23
更新:删除Object.create注释中指示的克隆方法.
myObjTwo = myObjOne;
Run Code Online (Sandbox Code Playgroud)
不克隆.它只是复制参考.
如果要克隆,可以使用JSON.parse和JSON.stringify
var x = {a:{b:{c:{'d':'e'}}}};
var y = JSON.parse(JSON.stringify(x)); //y is a clone of x
console.log(y.a.b.c.d); //prints e
console.log(y === x); //prints false
Run Code Online (Sandbox Code Playgroud)
警告:正如Raynos在评论中提到的,这个基于JSON的克隆不保留输出对象中输入对象的方法.如果您的对象不包含任何方法,此解决方案就足够了.方法是作为函数的对象的属性.如果var obj = {add : function(a,b){return a+b;}}那时add是一种方法obj.
如果您需要一个支持复制方法的解决方案,那么请仔细阅读这些SO答案(如musefan,Matt和Ranhiru Cooray所指出)
Nic*_*rdu 16
您可以像这样使用jQuery:
var myObjTwo = jQuery.extend(true, {}, myObjOne);
Run Code Online (Sandbox Code Playgroud)
第一个参数表明我们想要制作一个深层副本myObjOne.
| 归档时间: |
|
| 查看次数: |
35027 次 |
| 最近记录: |