浅いクローン、深いクローンの実現

8534 ワード

浅いクローン
 obj = {
            name: 'hu_time',
            age: 23,
            sex: 'male'
        }
        var obj1 = {};
         //    
        function clone(origin, target) {
            var target = target || {};
            for (let prop in origin) {
                target[prop] = origin[prop]
            }
        }
        clone(obj, obj1);
浅いクローンのオブジェクト情報は、新しいクローンオブジェクトの中で入れ子のデータに影響を与えます.
クローン
        obj = {
            name: 'hhhh',
            age: 23,
            card: ['visa', 'master'],
            wife: {
                name: 'abc',
                son: {
                    name: 'aaa'
                }
            }
        }

        obj1 = {}
        
        function deepClone(origin, target){
            var target = target || {},
                toStr = Object.prototype.toString,
                arrStr = "[object Array]";
            for(var prop in origin){
            	//            
                if(origin.hasOwnProperty(prop)){
                	//        
                    if(typeof(origin[prop]) == 'object'){
                        target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; 
                        deepClone(origin[prop], target[prop])
                    }else {
                        target[prop] = origin[prop]
                    }
                }
            }
            return target;
        }
        deepClone(obj, obj1);
VUE深クローン
	JSON.parse(JSON.stringify(this.array))
       for(var prop in obj)
1.元の値かどうかを判断するtypeOf()object 2.配列かそれとも対象typeof()object 1.instance of 2.tonttring 3.construct 3.対応する配列またはオブジェクトを作成する