Javascript对象拷贝(clone),希望大家给点建议
​1. [代码]方法代码

function cp(source, target) {
    function isBaseType(v) {
        var type = typeof v;
        var basetype = {
            "string": true,
            "number": true,
            "boolean": true,
            "function": true,
            "undefined": true
        };
        return basetype[type] || v === null;
    }
 
    function createClone(v) {
        var clone = [];
        if (!(v instanceof Array)) {
            clone = {};
        }
        return clone;
    }
 
    function createCloneFn(fn) {
        var fncode = fn.toString();
        var regex_params = /^function\s+?(\()([\s\S]*?)(\))/;
        var params = [];
        var params_index = 2;
        var result = fncode.match(regex_params);
        if (result) {
            var param_code = result[params_index];
            if (param_code) {
                params = param_code.split(",")
            }
        }       
        var fncode = fncode.replace(regex_params, "").replace(/^\s*?\{|\}\s*?$/g,"");
        fncode += " console.log('clone')";
        params.push(fncode);        
        return Function.apply(null, params); ;
    }http://www.huiyi8.com/guoqi/​
    function createVal(v)
    {国旗图标
        var val = v;
        if( typeof v =="function" )
        {   
            val = createCloneFn(v);
        }
        return val ;
    }
    if (source instanceof Function) {             
        target = createCloneFn(source);     
    } else if (source instanceof Array) {
        if (target instanceof Array) {
            var source_size = source.length;
            for (var index = 0; index < source_size; index++) {
                var item = source[index];
                if (!isBaseType(item)) {
                    var clone_array = createClone(item);
                    target.push(clone_array);
                    arguments.callee(item, clone_array);
                }
                //基础类型
                else {
                    target.push( createVal(item));
                }
            }
        } else {
            //console.log("数组拷贝不成立");
        }
    } else if (typeof source == "object") {
        if (!isBaseType(target))
            for (var attrname in source) {
                var val = source[attrname];
                //是否为基础类型
                if (!isBaseType(val)) {
                    var clone_obj = createClone(val);
                    target[attrname] = clone_obj;
                    arguments.callee(val, clone_obj);
                } else {
                    target[attrname] = createVal(val);
                }
            }
    } 
    return target;
}
2. [代码]测试代码     
var target = [];
var source = [
    [{
        a: {
            "show": function() {
                alert(1)
            }
        }
    }]
];
  target =cp(source, target);

最新文章

  1. .Net Core上用于代替System.Drawing的类库
  2. Bootstrap页面布局17 - BS选项卡
  3. 在同步中调用异步方法[.net 4.5]
  4. code 代码分析 及其解决方案
  5. Linux下Apache服务器并发优化
  6. Java进阶05 多线程
  7. spring core 与 context理解
  8. thinkphp框架的大D方法应用
  9. 将excel按照某一列拆分成多个文件(方案整理)
  10. webdriver之富文本,Firefox配置加载
  11. Java 关键字 速查表
  12. vue element-ui 的奇怪组件el-switch
  13. 第一阶段——站立会议总结DAY09
  14. XAML属性赋值转换之谜(WPF XAML语法解密)
  15. AutoResetEvent和ManualResetEvent理解
  16. Mysql 字符串函数 详解
  17. flash无法导入mp3文件
  18. Pathway富集分析气泡图
  19. 【刷题】BZOJ 2038 [2009国家集训队]小Z的袜子(hose)
  20. 默默的发现在网上找到的hook NtQueryDirectoryFile......

热门文章

  1. 关于错误Access Violation和too many consecutive exceptions 解决方法
  2. rsync同步文件
  3. 属性font-family:Font property font-family does not have generic default
  4. 模拟赛QAQ
  5. Liunx 下Redis 的安装
  6. 《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合
  7. Spring的Bean定义
  8. java消息队列怎么用
  9. go使用时间作为种子生成随机数
  10. JavaSE Map的使用