猿问

关于深拷贝问题

为什么这个深拷贝无法得到函数func: function(){return 1}

是不是函数无法复制?


fucntion deepClone(source) {

    var targetObj = {};

    for(var keys in source) {

        if(source.hasOwnProperty(keys)) {

            if(source[keys] && typeof source[keys] === 'object') {

                targetObj[keys] = deepClone(source[keys]);

            }else{

                targetObj[keys] = source[keys];            

            }

        }

    }

    return targetObj;

}


var o1 = {

    arr: 1,

    obj: {

        key: 'value'

    },

    func: function(){

        return 1;

    }

}

var o3 = deepClone(o1);

console.log(JSON.stringify(o3));


繁华开满天机
浏览 468回答 3
3回答

ibeautiful

这个deepClone函数并没有对函数进行拷贝,只是返回了它的引用JSON.stringify()在遇到不安全的JSON值会自动将其忽略,在数组中则会返回null(以保证单元位置不变)。不安全的 JSON 值: undefined 、 function 、 symbol (ES6+)和包含循环引用(对象之间相互引用,形成一个无限循环)的 对象 都不符合 JSON 结构标准,支持 JSON 的语言无法处理它们具体可以参考这篇我的这篇文章

温温酱

不是function不复制,是JSON.stringify无法转化function。o3.func()是可以执行的哟
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答