Javascript 深拷贝与浅拷贝理解与应用
2018-03-01 23:01
267 查看
深拷贝和浅拷贝的理解
所谓的拷贝一定是复制数据,而一般在讨论深浅拷贝的时候都是在说对象的深浅拷贝。对象拷贝(ObjectCopy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。JavaScript中有两种类型的对象拷贝:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)
概念
所谓的深拷贝(deepcopy),就是复制一个对象,使得对象在内存级别完全隔离.凡是拷贝发生了,但是在内存级别中没有完全分离就是浅拷贝(shallowcopy).对象就是键值对是由基本类型或对象类型组合而成的键值对(复合类型).简单对象(plainobject)
成员全部都是基本类型 {name:'jim',age:19,gender:'男'}复杂对象(complexobject)
成员可以是另一个对象也可以是简单类型 {name:'jim',age:19,gender:'男',car:{name:'宝马'}}清晰的了解其内存结构
拷贝如何实现
functionclone(obj){
vartmp={};
for(varkinobj){
tmp[k]=obj[k];
}
returntmp;
}
这个拷贝方法是不完整的拷贝方法
varo1={name:'jim',age:19,gender:'男'};
varo2=clone(o1);
如果代码是:
varo1={name:'jim',age:19,gender:'男',car:{name:'宝马'}};
varo2=clone(o1);
angular.js代码运用
functionbaseExtend(dst,objs,deep){
varh=dst.$$hashKey;
for(vari=0,ii=objs.length;i<ii;++i){
varobj=objs[i];
if(!isObject(obj)&&!isFunction(obj))continue;
varkeys=Object.keys(obj);
for(varj=0,jj=keys.length;j<jj;j++){
varkey=keys[j];
varsrc=obj[key];
if(deep&&isObject(src)){
if(isDate(src)){
dst[key]=newDate(src.valueOf());
}elseif(isRegExp(src)){
dst[key]=newRegExp(src);
}elseif(src.nodeName){
dst[key]=src.cloneNode(true);
}elseif(isElement(src)){
dst[key]=src.clone();
}else{
if(!isObject(dst[key]))dst[key]=isArray(src)?[]:{};
baseExtend(dst[key],[src],true);
}
}else{
dst[key]=src;
}
}
}
setHashKey(dst,h);
returndst;
}参考文献:
相关文章推荐
- 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝
- javascript之闭包理解以及应用场景
- 理解javascript 闭包概念优缺点及应用
- [转] JavaScript 原型理解与创建对象应用
- javascript深拷贝、浅拷贝和循环引用深入理解
- 深拷贝和浅拷贝的理解与应用
- 一个新人对于JavaScript简单应用的理解
- javascript --- 原型继承与属性拷贝的综合应用
- Javascript中对象深拷贝的应用
- javascript的闭包理解及应用注意
- 理解使用 JavaScript 构建 Metro 应用
- 深入理解 JavaScript 对象和数组拷贝
- JavaScript_如何使用arguments_的理解和应用01
- JavaScript 应用开发 #1:理解模型与集合
- JavaScript_如何使用arguments实现可变参数_的理解和应用02
- Javascript 理解 js闭包 应用
- JavaScript回调函数应用理解浅析
- JavaScript拷贝继承法的应用
- 深入理解javascript的浅拷贝与深拷贝
- javascript之闭包理解以及应用场景