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...