zoukankan      html  css  js  c++  java
  • js中的浅复制和深复制

    浅复制:浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响

    深复制:深复制不是简单的复制引用,而是在堆中重新分配内存,并且把源对象实例的所有属性都进行新建复制,以保证深复制的对象的引用图不包含任何原有对象或对象图上的任何对象,复制后的对象与原来的对象是完全隔离的

    //util作为判断变量具体类型的辅助模块
       var util = (function(){
           var class2type = {};
           ["Null","Undefined","Number","Boolean","String","Object","Function","Array","RegExp","Date"].forEach(function(item){
               class2type["[object "+ item + "]"] = item.toLowerCase();
           })
     
           function isType(obj, type){
               return getType(obj) === type;
           }
           function getType(obj){
               return class2type[Object.prototype.toString.call(obj)] || "object";
           }
           return {
               isType:isType,
               getType:getType
           }
       })();
     
       function copy(obj,deep){
            //如果obj不是对象,那么直接返回值就可以了
           if(obj === null || typeof obj !== "object"){
               return obj;
           }
        //定义需要的局部变脸,根据obj的类型来调整target的类型
           var i, target = util.isType(obj,"array") ? [] : {},value,valueType;
           for(i in obj){
               value = obj[i];
               valueType = util.getType(value);
           //只有在明确执行深复制,并且当前的value是数组或对象的情况下才执行递归复制
               if(deep && (valueType === "array" || valueType === "object")){
                   target[i] = copy(value);
               }else{
                   target[i] = value;
               }
           }
           return target;
       }
    
  • 相关阅读:
    Socket编程注意接收缓冲区大小
    Ubuntu 14.04环境变量修改
    python模块------json
    解决ssh连接linux系统特别慢的问题
    centos7 安装 ftp 服务及创建 repo源
    qcow2镜像制作
    k8s-helm01-----helm基本使用
    mysql常用sql
    js中自执行函数(function(){})()和(function(){}())区别
    npm镜像指定用淘宝镜像去下载
  • 原文地址:https://www.cnblogs.com/yangwang12345/p/7729361.html
Copyright © 2011-2022 走看看