zoukankan      html  css  js  c++  java
  • 【javascript基础】之深度克隆(深度拷贝)一个对象

    【题记】JavaScript深度克隆(深度拷贝)一个对象 http://www.css88.com/archives/4818  看到这篇文章,愚人码头方法还行,但总觉得缺少了什么,如果参数是伪数组的时候,比如childNodes,获取的是NodeList,是一个伪数组,用Array.prototype.slice.call(obj, 0)会报错,因为IE8以及更早的版本将NodeList以COM对象形式实现的。

    我的代码如下:

     1 function isArray( obj ){
     2     return     Object.prototype.toString.call(obj) === '[object Array]';
     3 }
     4 
     5 function isObject( obj ){
     6     return     Object.prototype.toString.call(obj) === '[object Object]';
     7 }
     8 
     9 function extend(obj){
    10     
    11     if(!obj || (obj.length && obj.length === 0) ){
    12         throw new Error("[参数错误]:请传入对象或者数组");    
    13     }
    14     
    15     var rets = null;
    16     
    17     if(obj.length){        
    18         try{
    19             rets = [].slice.call(obj, 0);    
    20         }catch(e){
    21             rets = [];
    22             i = obj.length;
    23             while(i--){
    24                 rets[i] = obj[i];
    25             }
    26         }
    27     }else{
    28         rets = {}
    29         for(var key in obj){
    30             var value = obj[key];
    31             if(obj.hasOwnProperty(key)){
    32                 rets[key] = isObject(value) ? extend(value) : value;
    33             }    
    34         }    
    35     
    36     }
    37     
    38     return rets;    
    39 }
    40 
    41 var a = {
    42     attr1 : 11,
    43     attr2 : 22,
    44     attr3 : {
    45         attr31 : 31    ,
    46         attr44 : {
    47             1 : 33,
    48             33: 333    
    49         }
    50     }    
    51 };
    52 
    53 console.log(extend(a));
    54 
    55 console.log(extend(document.querySelectorAll("div")));

     运行输出结果如下:

     还有文章里面还有一个方法挺好的,用的是JSON的方法

    var str = JSON.stringify(obj);
    var o = JSON.parse(str);
  • 相关阅读:
    解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容
    js中定时器setTimeout与setInterval使用方法经验总结
    解决ajax请求(SpringMVC后台)响应415/400/405错误
    css3 calc()的用法
    echarts2 饼图处理标签文字过长使之达到指定字数换行的目的
    在webstorm开发微信小程序之使用阿里自定义字体图标
    webstorm的一些小技巧
    前端 一些小知识,技巧总结
    用webstorm来开发微信小程序之less的配置
    js,mui,jq 操作基本的DOM
  • 原文地址:https://www.cnblogs.com/sniper007/p/2778143.html
Copyright © 2011-2022 走看看