拷贝,分深拷贝和浅拷贝。
在我们了解过的框架中,jquery的$.extend()可以根据第一个传入的参数区分拷贝类型;
jQuery.extend( target [, object1 ] [, objectN ] );
-
deep类型: Boolean如果是true,合并成为递归(又叫做深拷贝)。
-
target类型: Object对象扩展。这将接收新的属性。
-
object1类型: Object一个对象,它包含额外的属性合并到第一个参数.
-
objectN类型: Object包含额外的属性合并到第一个参数
function shallowCopy(srcObj, destObj){ var destObj = destObj || {}; for(var key in srcObj){ if(!destObj.hasOwnProperty(key)){ destObj[key] = srcObj[key]; } } return destObj; }
浅拷贝只是一种简单的循环赋值,所以运行效率非常高,速度快。
function deepCopy(srcObj, destObj){ var destObj = destObj || {}; for(var key in srcObj){ if(!destObj.hasOwnProperty(key)){ if(typeof srcObj[key] == 'object'){ destObj[key] = (srcObj[key].constructor === Array) ? [] : {}; deepCopy(srcObj[key], destObj[key]); }else{ destObj[key] = srcObj[key]; } } } return destObj; }
深拷贝的核心就是递归。