zoukankan      html  css  js  c++  java
  • 通过属性复制实现继承

    浅复制,如果属性是对象或者数组的时候,可能会导致以外

    function extend(parent, child) {
        var i;
        child = child || {};
        for (i in  parent) {
            if (parent.hasOwnProperty(i)) {
                child[i] = parent[i];
            }
        }
        return child;
    }
    var dad = {name:"jie"};
    var kid = extend(dad);
    console.log(kid.name);  //jie
    
    var dad ={
        counts:[1,2,3],
        reads:{paper:true}
    }
    var kid = extend(dad);
    //处理数组和对象的之后,这种浅复制可能导致意外发生
    kid.counts.push(4);
    kid.reads.paper = false;
    console.log(dad.counts);  //[ 1, 2, 3, 4 ]
    console.log(dad.reads);   //{ paper: false }

    深度复制,解决复制对象或者数组出现的问题。

    //深度复制实现,利用了递归方法
    function extendDeep(parent, child) {
        var i,
            toStr = Object.prototype.toString,
            astr = "[object Array]";
        child = child || {};
    
        for (i in parent) {
            if (parent.hasOwnProperty(i)) {
                if (typeof parent[i] === "object") {
                    child[i] = (toStr.call(parent[i] === astr)) ? [] : {};
                    extendDeep(parent[i], child[i]);
                } else {
                    child[i] = parent[i];
                }
            }
        }
        return child;
    }
    var dad = {
        counts: [1, 2, 3],
        reads: {paper: true}
    };
    var kid = extendDeep(dad);
    
    kid.counts.push(4);
    console.log(kid.counts);  //[ 1, 2, 3, 4 ]
    console.log(dad.counts);  //[ 1, 2, 3 ]
    console.log(dad.reads === kid.reads);  //false
  • 相关阅读:
    文件操作
    MFC
    MFC
    MFC
    MFC
    大陆居民身份证验证方法(java)
    java validator的原理与使用
    解析搜狗词库(python)
    ICTCLAS改进的java版分词软件
    mvn打包
  • 原文地址:https://www.cnblogs.com/scnuwangjie/p/5002912.html
Copyright © 2011-2022 走看看