我在原型链上写了一个深度克隆对象的方法,谁能帮我完善一下吗?

Object.prototype.clone = function(){
var ret = {};
var Str = Object.prototype.toString.call(this[prop]);
for(var prop in this){
if(this.hasOwnProperty(prop)){
if(Str == "[object Object]"){
ret[prop] = this[prop].clone();
}else{
ret[prop] = this[prop];
}
}
}
return ret;
}

https://blog.csdn.net/q1056843325/article/details/52939190

你只克隆了对象,没克隆数组

Object.prototype.clone = Array.prototype.clone = function(){
    var ret = Object.prototype.toString.call(this)=="[object Object]"?{}:[];
    for(var prop in this){
        if(this.hasOwnProperty(prop)){
            var Str = Object.prototype.toString.call(this[prop]);
            if(Str == "[object Object]" || Str == "[object Array]"){
                ret[prop] = this[prop].clone();
            }else{
                ret[prop] = this[prop];
            }
        }
    }
    return ret;
}

var a = [{m:[1,2]}];
var b = a.clone();
b[0].m[1] = 5;
alert(JSON.stringify(a));
alert(JSON.stringify(b));

另外,如果你对象中都是json的数据(没有函数或dom元素),可以用下面方法深度克隆
obj2 = JSON.parse(JSON.stringify(obj1))