美文网首页
面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)

面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)

作者: 凸小布 | 来源:发表于2017-02-26 17:09 被阅读16次

title: 面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)
date: # 文章生成时间,一般不改
categories: # 文章分类目录,可省略
- 面向对象
tags: # 文章标签,可省略
- 面向对象
- 基于原型面向对象的继承 # 个数不限,单个可直接跟在 tags 后面


完整的继承方案

  • 拥有父构造函数的实例属性
  • 拥有父构造函数的原型属性
  • 是相互独立的,彼此不受影响
<script>

    if(typeof Array.isArray != "function") {
        Array.isArray = function(obj){
            return Object.prototype.toString.call(obj) == "[object Array]";
        }
    }
    function deepCopy(obj1,obj2) {
        obj1 = obj1 || {};
        for (var i in obj2)
        {
            if (obj2.hasOwnProperty(i))
            {
                if( typeof obj2[i] == "object")
                {
                    //判断是数组还是对象
                    obj1[i] = Array.isArray(obj2[i])?[]:{};
                    //引用类型
                    deepCopy(obj1[i],obj2[i]);   //函数调用
                }else
                {
                    //值类型
                    obj1[i] = obj2[i];
                }
            }
        }
    }

    function Person(name,age){
        this.name = name;
        this.age = age;
    };
    Person.prototype.des = "描述信息";
    Person.prototype.car = {
        type:"汽车"
    }
    Person.prototype.logDes = function(){
        console.log(this.des);
    };

    function Boy(bookName,name,age){
        this.bookName = bookName;
        //Person.call(this,"悟空",600);  //借用构造函数
        Person.call(this,name,age);
    }

    //设置原型继承
    //Boy.prototype = Person.prototype;
    deepCopy(Boy.prototype,Person.prototype);  //把父构造函数原型对象上面的属性和方法全部拷贝一份给Boy

    //创建对象
    var boy01 = new Boy("水煮三国","悟空",600);
    var boy02 = new Boy("大话西游","云风",40);

    Boy.prototype.car.type = "火车";
    console.log(Boy.prototype);

    var p1 = new Person();
    console.log(p1.car.type);
</script>

相关文章

  • 面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)

    title: 面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)date: # 文章生成时间,一般不改...

  • 关于继承

    继承的实现方法 属性拷贝 浅拷贝 深拷贝 原型继承 原型式继承 原型链继承 组合继承(深拷贝+优化后的原型式继承)...

  • js的继承

    面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...

  • 继承和函数进阶

    一. 继承的几种方式 1.继承 对象拷贝:for……in :父对象的属性拷贝给子对象。 2.原型继承 3.构造函数...

  • 继承

    继承的实现 1原型式继承 在所有的原型上扩展,或者置换原型 2混入式继承 将要继承的对象上的所有成员拷贝一份,添加...

  • Java对象拷贝

    常用的对象拷贝有2种方式,分别是浅拷贝,深拷贝。 1. 浅拷贝 在浅拷贝中,如果原型对象的成员变量是值类型,将复制...

  • 浅拷贝和深拷贝与(基本复杂类型)数组去重

    对象浅拷贝和深拷贝 //浅拷贝 //深拷贝 所有继承了 Object 的对象都会继承到 hasOwnPropert...

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • Web前端------JS高级继承的实现方式

    原型实现继承 借用构造函数实现继承 组合继承 拷贝继承 继承总结 浅拷贝 深拷贝 欢迎关注我的个人微信公众号,免费...

  • 面向对象(八)继承___ 01 拷贝属性(浅拷贝)

    拷贝属性(浅拷贝) 存在问题:如果属性的值是引用类型的,那么子对象和父对象共享一块儿数据,修改了某一个对象,对另外...

网友评论

      本文标题:面向对象(八)继承___ 07完全拷贝(直接拷贝原型的成员)

      本文链接:https://www.haomeiwen.com/subject/oxoowttx.html