javascript - 关于JS对象克隆的问题
阿神
阿神 2017-04-10 15:03:08
[JavaScript讨论组]
js  var foo1 = function (a) {
        var b = $.extend({},a);

        console.log(JSON.stringify(a));
        console.log(JSON.stringify(b));
        b.d=3;
        console.log(JSON.stringify(a));
        console.log(JSON.stringify(b));

    };
执行输出
foo1({d:1})
{"d":1}
{"d":1}
{"d":1}
{"d":3}
js  var foo2 = function (a) {
        var b = $.extend({},a);

        console.log(JSON.stringify(a));
        console.log(JSON.stringify(b));
        b.d.c=3;
        console.log(JSON.stringify(a));
        console.log(JSON.stringify(b));

    };
执行输出
foo2({d:{c:1}})
{"d":{"c":1}}
{"d":{"c":1}}
{"d":{"c":3}}
{"d":{"c":3}}

为什么foo2克隆之后对b的修改会影响到a的值,而foo1里面却不会?

阿神
阿神

闭关修行中......

全部回复(3)
迷茫

这个是 jQuery 对象拷贝的问题,并不是 JavaScript 的问题,查看 API文档 可以知道,$.extend() 第一个参数指定的是你是否进行深拷贝,默认是 false。你可以设置成 var b = $.extend( true, {}, a ); 试试。 关于深拷贝和浅拷贝的文章可以网路上搜索一下,这里给出一个阮老师的文章链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inhe...

迷茫

@公子 正解,深浅拷贝的问题,此处必须用深拷贝

伊谢尔伦

第一种情况下你的d值是基本类型
第二种情况下你的d值是对象

对象传递的是引用

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号