美文网首页
面向对象(八)继承___ 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完全拷贝(直接拷贝原型的成员)

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