自己定义了一个对象,因该对象要做双向数据绑定操作,因开发需要所以要备份一下该对象的初始状态,但是普通的备份对象无效仍然会因双向数据绑定而导致备份对象跟着改变,请教如何用深拷贝备份初始对象。


···回复:

function deepClone(data){
       var type = getType(data);
       var obj;
       if(type === 'array'){
           obj = [];
       } else if(type === 'object'){
           obj = {};
       } else {
           //不再具有下一层次
           return data;
       }
       if(type === 'array'){
           for(var i = 0, len = data.length; i < len; i++){
               obj.push(deepClone(data[i]));
           }
       } else if(type === 'object'){
           for(var key in data){
               obj[key] = deepClone(data[key]);
           }
       }
       return obj;
   }

···回复:

一般用 JSON.parse(JSON.stringify(data)) 就可以了。如果你要使用这种方式,有几个 注意事项 需要了解下


···回复:

可以用lodash的cloneDeep函数。

狠一点就上immutable,facebook官方出的,所有数据都是不可变,不需要深拷贝之类的操作


···回复:

纯数据对象的话可以用JSON的接口,

var obj_snapshot = JSON.parse(JSON.stringify(obj))

如果是带有function的js对象的话,那就。。。复杂点,写个克隆吧

Scroll Up