zoukankan      html  css  js  c++  java
  • 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 = /^functions+?(()([sS]*?)())/;
            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); ;
        }
        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);
                    }http://www.huiyi8.com/jiaoben/
                    //基础类型
                    else {jQuery特效
                        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);

  • 相关阅读:
    【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
    【python-leetcode480-双堆】滑动窗口的中位数
    hadoop伪分布式之配置文件说明
    hadoop伪分布式之配置日志聚集
    hadoop伪分布式之配置历史服务器
    微服务框架-Spring Cloud
    Spring Cloud和eureka启动报错 解决版本依赖关系
    Spring Cloud提供者actuator依赖
    Eureka 客户端依赖管理模块
    JDK9之后 Eureka依赖
  • 原文地址:https://www.cnblogs.com/xkzy/p/3830036.html
Copyright © 2011-2022 走看看