js实例教程-JavaScript深度克隆实例讲解

发布时间:2018-12-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js实例教程-JavaScript深度克隆实例讲解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。

深度克隆:复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象,也就与原来对象没有任何关联了。

深度克隆的关键是对引用值的处理。

我们可以把深度克隆分成4个部分

1:遍历被克隆对象的所有属性和方法

2:进行判断是否为引用值

3:判断是数组还是对象

4:递归调用克隆函数

那我们来解决这个四个部分就好了。

1:遍历对象很简单,直接for in 循环就好了。

2:判断是否为引用值只需要判断是否为对象,直接调用tyPEof就好了,不是object那么就是原始值或者null

3:判断是数组还是对象,有几种方法。点击打开链接

4:继续调用克隆函数就好了。

代码如下:

         VAR deepclone=(function () {             var str='[obejct Array]';             return function(target,origin) {                 target=target||{};//止传的不是对象,就换成对象。                 for (var key in origin) {                     if (origin.hasOwnPRoperty(key)) {//不需要复制原型上面的                         if (origin[key]!==null&&typeof(origin[key])==='object') {                             if (Object.prototype.toString.call(origin[key])===str) {//是数组                                 target[key]=[];                             }                             else {                                 target[key]={};                             }                             deepclone(target[key],origin[key]);//递归调用                         }                         else target[key]=origin[key];                     }                 }             }         }());

检验代码:

         var obj={             name:'cyl',             age:19,             sex:';male',             classMATE: ['dpc','wDF','rj'],             Teacher: {                 name:'lsx',                 age:'50',                 sex:'male'             }         }         var deepclone=(function () {             var str='[obejct Array]';             return function(target,origin) {                 target=target||{};                 for (var key in origin) {                     if (origin.hasOwnProperty(key)) {                         if (origin[key]!==null&&typeof(origin[key])==='object') {                             if (Object.prototype.toString.call(origin[key])===str) {                                 target[key]=[];                             }                             else {                                 target[key]={};                             }                             deepclone(target[key],origin[key]);                         }                         else target[key]=origin[key];                     }                 }             }         }());         var son={};         deepclone(son,obj);

运行结果:

我们发现改变son对obj没有任何影响,深度克隆成功了。

浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。

深度克隆:复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象,也就与原来对象没有任何关联了。

深度克隆的关键是对引用值的处理。

我们可以把深度克隆分成4个部分

1:遍历被克隆对象的所有属性和方法

2:进行判断是否为引用值

3:判断是数组还是对象

4:递归调用克隆函数

那我们来解决这个四个部分就好了。

1:遍历对象很简单,直接for in 循环就好了。

2:判断是否为引用值只需要判断是否为对象,直接调用typeof就好了,不是object那么就是原始值或者null

3:判断是数组还是对象,有几种方法。点击打开链接

4:继续调用克隆函数就好了。

代码如下:

         var deepclone=(function () {             var str='[obejct Array]';             return function(target,origin) {                 target=target||{};//防止传的不是对象,就换成对象。                 for (var key in origin) {                     if (origin.hasOwnProperty(key)) {//不需要复制原型上面的                         if (origin[key]!==null&&typeof(origin[key])==='object') {                             if (Object.prototype.toString.call(origin[key])===str) {//是数组                                 target[key]=[];                             }                             else {                                 target[key]={};                             }                             deepclone(target[key],origin[key]);//递归调用                         }                         else target[key]=origin[key];                     }                 }             }         }());

检验代码:

         var obj={             name:'cyl',             age:19,             sex:'male',             classmate: ['dpc','wdf','rj'],             Teacher: {                 name:'lsx',                 age:'50',                 sex:'male'             }         }         var deepclone=(function () {             var str='[obejct Array]';             return function(target,origin) {                 target=target||{};                 for (var key in origin) {                     if (origin.hasOwnProperty(key)) {                         if (origin[key]!==null&&typeof(origin[key])==='object') {                             if (Object.prototype.toString.call(origin[key])===str) {                                 target[key]=[];                             }                             else {                                 target[key]={};                             }                             deepclone(target[key],origin[key]);                         }                         else target[key]=origin[key];                     }                 }             }         }());         var son={};         deepclone(son,obj);

运行结果:

我们发现改变son对obj没有任何影响,深度克隆成功了。

觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦! js技巧,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的js实例教程-JavaScript深度克隆实例讲解全部内容,希望文章能够帮你解决js实例教程-JavaScript深度克隆实例讲解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。