javascript实现深拷贝的办法

来源:互联网 发布:mac usb耗电量大 编辑:程序博客网 时间:2024/05/17 01:36

深拷贝指的是对 对象属性所引用的对象全部进行新建对象的复制,以保证深复制的对象的引用,不包含任何原有对象或对象图上的任何对象,隔离出两个完全不同的对象图。

解决的办法有:

1.用jquery的extend方法,把对象合并到新的对象去,会返回一个深层次的副本。
2.使用JSON的序列化,var b = JSON.stringify(a); 在反序列化:JSON.parse(b);

//这个函数可以深拷贝 对象和数组var cloneObj = function(obj){    var str, newobj = obj.constructor === Array ? [] : {};    if(typeof obj !== 'object'){        return;    } else if(window.JSON){        str = JSON.stringify(obj), //系列化对象        newobj = JSON.parse(str); //还原    } else {        for(var i in obj){            newobj[i] = typeof obj[i] === 'object' ?             cloneObj(obj[i]) : obj[i];         }    }    return newobj;};http://www.zhihu.com/question/23031215/answer/31944721

例子:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body></body><script>    var a={q:1,w:2,m:'k'};    /*var b=a;    b.w='mm';    console.log(a);    console.log(b);*/    console.log(JSON.stringify(a));    var c = JSON.parse(JSON.stringify(a));    c.w='yy';    console.log(a);         //{q:1,w:2,m:'k'};         console.log(c);         //{q:1,w:2,m:'yy'};</script><script>    var a = {        q:1,        w:2,        e:3    }    function copyAndModify(oldObj, name, value) {        var newObj = oldObj;        newObj[name] = value;        return newObj;    }    var b = copyAndModify(a, 'q', 'q');    console.log(b);</script><script>    function extend(to, from) {        for (var key in from) {            to[key] = from[key];        }        return to;    };    var a = {        q:1,        w:2,        e:3    };    var b = {};    extend(b, a);    a.q = 'q';    console.log(a.q);              //q    console.log(b.q);              //1</script></html>
0 0
原创粉丝点击