Javascript 对象复制分析

访客 阅读:220 2021-06-07 08:27:56 评论:0

  如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法。效率比较低。

  可以采用如下递归的方式复制一个对象。

function clone(target) {    
        var buf;    
        if (target instanceof Array) {    
            buf = [];  //创建一个空的数组  
            var i = target.length;    
            while (i--) {    
                buf[i] = clone(target[i]);    
            }    
            return buf; 
        }else if (target instanceof Object){    
            buf = {};  //创建一个空对象  
            for (var k in target) {  //为这个对象添加新的属性  
                buf[k] = clone(target[k]);    
            }    
            return buf;    
        }else{    
            return target;    
        }    
    } 

这里注意Array的判断一定要在前面,因为数组也是一个Object(funcion也是),所以如果Object的判断在前就不会走到Array的判断了。

引申一下

var obj={}; 
var ary=[]; 
var fn=funcion(){}; 
 
alert(typeof obj) ;//object 
alert(typeof ary) ;//object 
alert(typeof fn) ;//function 
 
alert(obj instanceof Object);//true 
alert(ary instanceof Object);//true 
alert(ary instanceof Array);//true 
alert(fn instanceof Object);//true 
alert(fn instanceof Function);//true

另外还找到一种方式

Object.prototype.Clone = function(){ 
    var objClone; 
    if (this.constructor == Object){ 
        objClone = new this.constructor();  
    }else{ 
        objClone = new this.constructor(this.valueOf());  
    } 
    for(var key in this){ 
        if ( objClone[key] != this[key] ){  
            if ( typeof(this[key]) == 'object' ){  
                objClone[key] = this[key].Clone(); 
            }else{ 
                objClone[key] = this[key]; 
            } 
        } 
    } 
    objClone.toString = this.toString; 
    objClone.valueOf = this.valueOf; 
    return objClone;  
} 

标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号