js设计模式 -- 拷贝模式
Posted 九州酒仙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js设计模式 -- 拷贝模式相关的知识,希望对你有一定的参考价值。
拷贝,分深拷贝和浅拷贝。
在我们了解过的框架中,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; }
深拷贝的核心就是递归。
以上是关于js设计模式 -- 拷贝模式的主要内容,如果未能解决你的问题,请参考以下文章
js的命名空间 && 单体模式 && 变量深拷贝和浅拷贝 && 页面弹窗设计
Node.js资讯 | ES6 下的函数式:递归模式;JavaScript 深拷贝性能分析