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;
       }
    
  • 相关阅读:
    换行的展示
    jsp页面的导出功能
    怎么设置回车键为提交功能?
    HBuilder使用心得
    js和jQuery
    前端常用技术总结--java程序员
    对压缩文件加密
    删除表中一个字段的SQL语句
    用NPOI操作EXCEL-锁定列CreateFreezePane()
    MVC 点击下载文档
  • 原文地址:https://www.cnblogs.com/yangwang12345/p/7729361.html
Copyright © 2011-2022 走看看