您的位置:首页 > Web前端 > JavaScript

js对象的深拷贝问题

2014-03-17 11:01 260 查看
在网上很多地方看到一个关于深拷贝的例子,但测试中发现一个问题

用 sObj typeof = "object"时,sObj可能是null,而null.constructor会报错

但例子很好

js对象深拷贝:

JavaScript代码

js对象深拷贝:

JavaScript代码
//对象和数组的深拷贝 
  
Object.clone = function(sObj){ 
  
     //   if(typeof sObj !== "object")  sObj可能是null,而null.constructor会报错
    if(typeof sObj !== "object" || sObj == null){ 
            return sObj; 
  
        } 
  
        var s = {}; 
  
        if(sObj.constructor == Array){ 
  
            s = []; 
  
        } 
  
        for(var i in sObj){ 
  
            s[i] = Object.clone(sObj[i]); 
  
        } 
  
        return s; 
  
   }  

js对象扩展:

JavaScript代码
//对象扩展,tObj被扩展对象,sObj扩展对象  
  
   Object.extend = function(tObj,sObj){ 
  
        for(var i in sObj){ 
  
            if(typeof sObj[i] !== "object"){ 
  
                tObj[i] = sObj[i]; 
  
            }else if (sObj[i].constructor == Array){ 
  
                tObj[i] = Object.clone(sObj[i]); 
  
            }else{ 
  
                tObj[i] = tObj[i] || {}; 
  
                Object.extend(tObj[i],sObj[i]); 
  
            } 
  
        } 
  
   }  

测试用例如下:

JavaScript代码
var a = {}; 
  
var b = {"a":1, 
  
         "b":{"c":function(t){ 
  
                       alert(t); 
  
                    } 
  
             }, 
  
         "d":{"e":2, 
  
              "f":[1,4,5,7,9] 
  
             } 
  
        }; 
  
Object.extend(a,b);//a获得了b的所有属性 
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: