• 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);
                    }
                    //基础类型
                    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 {http://www.huiyi8.com/moban/
                        target[attrname] = createVal(val);
                    }
                }
        } 
        return target;
    }
    2. [代码]测试代码     
    var target = [];
    var source = [
        [{
            a: {
                "show": function() {
                    alert(1)
                }
            }
        }]
    ];
      target =cp(source, target);

  • 相关阅读:
    月薪3万+的大数据人都在疯学Flink,为什么?
    Flink应用场景
    Flink生态与未来
    flink学习笔记-split & select(拆分流)
    .NET MVC5简介(四)Filter和AuthorizeAttribute权限验证
    .NET MVC5简介(三)Result
    .NET MVC5简介(二)
    VUE基础实用技巧
    .NET MVC5简介(一)
    WebApi简介
  • 原文地址:https://www.cnblogs.com/xkzy/p/3825858.html
Copyright © 2020-2023  润新知