关于拷贝对象的一些常用API

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
此条目发表在成长, 移动端分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注