js 普通对象继承

//非构造函数继承

    var persion = {
        age:24
    }
    
    var student = {
        identity:'student'
    }
    
    //1.object方法
    function object(o){
        function f(){};
        f.prototype = o;
        return new f();
    }
    
    var student = object(persion);
    console.log("identity:"+student.identity+" age:"+student.age);
    //这里的identity是undefined 因为student自己的属性被覆盖掉了,需要在继承后才加上自己的属性
    student.identity = "student";
    console.log("identity:"+student.identity+" age:"+student.age);
    
    //2浅拷贝方法
    function extendCopy(parent){
         var c = {};
        for(var i in parent){
            c[i] = parent[i];
        }
        return c;
    }
    
    /*
    这种方法如果遇到parent属性也是一个对象或数组的时候,
    属性值其实是一个内存地址,这样会出parent改变那个对象属性,继承的子类也会跟着变
    这样就不准了
     */
    
    //深拷贝——递归调用浅拷贝就能实现深拷贝
    function deepCopy(c,parent){
        var c = c||{};
        for(var i in parent){
            if(typeof c[i] == "ojbect"){
                c[i] = (parent[i].constructor === Array)?[]:{};
                deepCopy(c[i],parent[i]);
            }else{
                c[i] = parent[i];
            }
        }
        return c;
    }
    
    var a = {
        name:"a"
    }
    var p = {
        age:24,
        role:{code:404,msg:"msg"}
    }
    deepCopy(a,p);
    a.name = "I am a";
    console.log("name:"+ a.name+" code:"+ a.role.code+" msg:"+ a.role.msg+" age"+ a.age);

参考自:阮一峰

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一个博客,这个博客记录了他读这本书的笔记,总结得不错。《深度探索C++对象模型》笔记汇总 1. C++对象模型与内...
    Mr希灵阅读 5,675评论 0 13
  • 面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的慨念,而通过类可以创建任意多个...
    threetowns阅读 888评论 0 4
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,456评论 3 12
  • 本文先对es6发布之前javascript各种继承实现方式进行深入的分析比较,然后再介绍es6中对类继承的支持以及...
    lazydu阅读 16,737评论 7 44
  • 首先恭喜你,看到了我这篇文章,在这篇文章里,我将传授与你分享三种时间管理的方法,三种不需要意志力的时间管理方法。 ...
    吴少轩阅读 441评论 2 3