js对象浅拷贝深拷贝

// svg.data = DevSvg; // 这样是共用一个DevSvg对象
    
// svg.data = $.extend({}, DevSvg); // 浅拷贝,二级对象还是传址
    
// svg.data = Object.assign({}, DevSvg); // 浅拷贝,二级对象还是传址
    
svg.data = JSON.parse(JSON.stringify(DevSvg)); // 简单好用的深拷贝

parse字符串的方式虽然简单好用,但是也有缺陷,比如数据中有function类型的数据,就没有办法拷贝过去,只能自行拷贝,好在我这里只使用到了一个function参数,对这种简单好用的拷贝方式还是很满意的

针对function类型数据的处理,见下图:

 

 

 

 还有一种方式就是利用方法返回对象,这样每次获取的都是新的对象,代码如下:

var DevSvg = function() {
        return {
            SvgData: SvgCommonData.SvgData,
            TitleData: SvgCommonData.TitleData(),
            online: {
                path: SvgCommonData.PathData("在线:", 0.5, SvgCommonData.onlineColor),
                info: SvgCommonData.InfoData(25, SvgCommonData.onlineColor)
            },
            offline: {
                path: SvgCommonData.PathData("离线:", 0.5, SvgCommonData.offlineColor),
                info: SvgCommonData.InfoData(-25, SvgCommonData.offlineColor)
            },
            goPage: function() {
                alert("DevSvg");
            }
        };
};
var obj = DevSvg(); 
var obj2 = DevSvg(); // obj 和 obj2 就是两个不同的对象

 

posted @ 2020-03-17 11:01  1156740846  阅读(141)  评论(0编辑  收藏  举报