为了账号安全,请及时绑定邮箱和手机立即绑定

关于深拷贝问题

关于深拷贝问题

繁华开满天机 2019-03-07 18:15:13
为什么这个深拷贝无法得到函数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));
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

这个deepClone函数并没有对函数进行拷贝,只是返回了它的引用

JSON.stringify()在遇到不安全的JSON值会自动将其忽略,在数组中则会返回null(以保证单元位置不变)。

不安全的 JSON 值: undefined 、 function 、 symbol (ES6+)和包含循环引用(对象之间相互引用,形成一个无限循环)的 对象 都不符合 JSON 结构标准,支持 JSON 的语言无法处理它们

具体可以参考这篇我的这篇文章


查看完整回答
反对 回复 2019-03-15
?
温温酱

TA贡献1752条经验 获得超4个赞

不是function不复制,是JSON.stringify无法转化function。

o3.func()是可以执行的哟


查看完整回答
反对 回复 2019-03-15
  • 3 回答
  • 0 关注
  • 467 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信