js深拷贝(深复制)函数(支持全部数据类型)

2019-10-17  本文已影响0人  Bior
function DeepClone (data) {
    if (data === null || typeof data !== 'object') return data;
    var newObj = data instanceof Array ? [] : {};
    for (var key in data) newObj[key] = DeepClone(data[key]);
    return newObj;
}

var obj = {
    id: 1,
    name: 'xxx',
    sayName: function (a) {
        console.log('my name is ' + a);
    },
    childs: [
        {'a': 1}, 
        {'c': 'd'}, 
    ],
    opts: {
        xxx: [1,2,'3'],
        aa: 'bb'
    },
};
var newObj = DeepClone(obj);
console.log(obj)
console.log(newObj)
obj.sayName('bior')
newObj.sayName('帅哥')

注意: 此方法有点问题... 忘记考虑到特殊对象(formdata 和 date 等),还是得多判断一步,太懒了,看一下我的另外一篇文章吧:
https://www.jianshu.com/p/a1b76b4e24a8

上一篇 下一篇

猜你喜欢

热点阅读