1、underscore.js:
a)_.extend
用法:_.extend(destination, *sources)
复制source对象中的所有属性覆盖到destination对象上,并且返回 destination 对象. 复制是按顺序的, 所以后面的对象属性会把前面的对象属性覆盖掉(如果有重复).浅拷贝。例子如下:
var name = {name:'john'}; var info = {age:30,other:{add:"USA"}}; _.extend(name,info); name.other.add = 'CN'; console.log(info);//Object {age: 30, other: Object}拷贝 console.log(info.other.add);//CN,浅拷贝
b)_.clone
用法:_.clone(*sources)
创建一个浅复制的对象。任何嵌套的对象或数组都通过引用拷贝,不会复制。
var john = {name:'john',info:{add:"UK"}}; var newPerson = _.clone(john); newPerson.name = "jack"; newPerson.info.add = "USA"; console.log(john.info.add);//USA,浅拷贝 console.log(newPerson.info.add);//USA
2、jQuery:
深拷贝/浅拷贝$.extend,根据传入参数可以进行深拷贝或浅拷贝。用法:destination = $.extend(true,{},sources);例子如下:
var john = {name:'john',info:{add:"UK"}}; var newPerson = $.extend(true,{},john);//深拷贝 newPerson.name = "jack"; newPerson.info.add = "USA"; console.log(john.info.add);//UK console.log(newPerson.info.add);//USA var sPerson = $.extend(false,{},john);//浅拷贝 sPerson.name = "jack"; sPerson.info.add = "USA"; console.log(john.info.add);//USA console.log(sPerson.info.add);//USA