首页 > 编程语言 > 详细

【javascript】浅层克隆、深度克隆

时间:2020-02-08 20:49:10      阅读:94      评论:0      收藏:0      [点我收藏+]

1、浅层克隆,  (引用值改变, 两个都一起变)

            var obj = {
                name : ‘xiaoming‘,
                age : 12,
                children : [‘mimi‘,‘lili‘,‘rokey‘]
            }
            var obj2 = {};
function clone(origin, target) { var target = target || {}; for(var prop in origin) { target[prop] = origin[prop]; } return target; }
clone(obj, obj2);

 

2、深度克隆 (只考虑数组和对象)

    1)判断是不是原始值

 (2)判断是数组还是对象   Object.prototype.toString.call([]) = ‘[object Array]‘    Object.prototype.toString.call({}) = ‘[object Object]‘

   (3)建立相应的数组和对象

   (4)递归

          function deepClone(origin, target) {
                var target = target || {},
                    toStr = Object.prototype.toString,
                    arrStr = ‘[object Array]‘;
                for(var prop in origin) {
                    if(origin.hasOwnProperty(prop)) {     //判断是不是对象自带的属性
                        if(origin[prop] !== ‘null‘ && typeof(origin[prop]) == ‘object‘) {
                            if(toStr.call(origin[prop]) == arrStr) {
                                target[prop] = [];
                            }else {
                                target[prop] = {};
                            }
                            deepClone(origin[prop], target[prop]);
                        }else {
                            target[prop] = origin[prop];
                        }
                    }
                }
                return target;
            }

 

【javascript】浅层克隆、深度克隆

原文:https://www.cnblogs.com/hjysunshine/p/12284969.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!