首页 > 关于JS对象克隆的问题

关于JS对象克隆的问题

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里面却不会?


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


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

对象传递的是引用


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

【热门文章】
【热门文章】