zoukankan      html  css  js  c++  java
  • 原型 继承

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6         <script>
     7             
     8             //继承: 子类继承父类的属性和方法
     9             //子类, 父类, 
    10             
    11             //类(构造函数)
    12             //IPod: 属性:color, 方法:listenMusic
    13             //IPad: 属性:color,type, 方法:listenMusic,playKingOfHonor
    14             //IPhone: 属性:color, type, size  方法: listenMusic,playKingOfHonor,call
    15             
    16             //父类
    17             function IPod(){
    18                 this.color = "黑色";
    19                 this.listenMusic = function(){
    20                     console.log("听音乐");
    21                 }
    22             }
    23             
    24             //子类
    25             function IPad(){
    26                 this.type = "iPad Air";
    27                 this.playKingOfHonor = function(){
    28                     console.log("玩王者荣耀");
    29                 }
    30                 
    31             }                        
    32             IPad.prototype = new IPod();  //原型链继承, 继承父类IPod
    33             
    34             //ipad对象
    35             var ipad = new IPad();
    36             console.log(ipad.color + "," + ipad.type); //黑色,iPad Air
    37             ipad.playKingOfHonor();
    38             ipad.listenMusic(); //听音乐
    39             
    40             
    41             //孙子类
    42             function IPhone(){
    43                 this.size = "5.5寸";
    44                 this.call = function(){
    45                     console.log("打电话");
    46                 }
    47             }
    48             IPhone.prototype = new IPad(); //继承父类IPad
    49             
    50             //iphone对象
    51             var iphone = new IPhone();
    52             console.log(iphone.size); //5.5寸
    53             console.log(iphone.type); //iPad Air
    54             console.log(iphone.color); //黑色
    55             iphone.call();
    56             iphone.playKingOfHonor();
    57             iphone.listenMusic();
    58             
    59             console.log(iphone instanceof IPhone); //true
    60             console.log(iphone instanceof IPad); //true
    61             console.log(iphone instanceof IPod); //true
    62             console.log(iphone instanceof Object); //true
    63             
    64             console.log(ipad instanceof IPhone); //false
    65             console.log(ipad instanceof IPad); //true
    66             console.log(ipad instanceof IPod); //true
    67             console.log(ipad instanceof Object); //true
    68             
    69             
    70             
    71             
    72         </script>
    73     </head>
    74     <body>
    75     </body>
    76 </html>

    练习

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6         <script>
     7             
     8             /*
     9              2, 练习
    10                   实现以下类的原型链继承
    11                  父类:Cat
    12                     方法: eat; miaow
    13                     属性: fur
    14                     说明: eat吃各种东西
    15                 
    16                 子类1: GarfieldCat
    17                     方法:eat; miaow; talk
    18                     属性:fur; glasses
    19                     说明:eat只吃肉
    20                 
    21                 子类2: TomCat
    22                     方法:eat; miaow; catchMouse
    23                     属性:fur; friend
    24                     说明:eat只吃面包
    25                 
    26             * */
    27             
    28             //父类:Cat
    29             function Cat(){
    30                 this.fur = "黑色的皮";
    31                 this.miaow = function(){
    32                     console.log("喵喵");
    33                 }
    34                 this.eat = function(){
    35                     console.log("吃各种东西");
    36                 }
    37             }
    38             
    39             //子类1: GarfieldCat
    40             function GarfieldCat(){
    41                 this.glasses = "眼镜";
    42                 this.talk = function(){
    43                     console.log("可以说话");
    44                 }
    45                 this.eat = function(){
    46                     console.log("只吃肉");
    47                 }
    48             }
    49             GarfieldCat.prototype = new Cat(); //继承Cat
    50             //实例对象
    51             var garfieldCat = new GarfieldCat();
    52             garfieldCat.eat(); //只吃肉
    53             
    54             //子类2: TomCat
    55             function TomCat(){
    56                 this.friend = "Jerry";
    57                 this.catchMouse = function(){
    58                     console.log("抓老鼠");
    59                 }
    60                 this.eat = function(){
    61                     console.log("吃面包");
    62                 }
    63             }
    64             TomCat.prototype = new Cat(); //继承Cat
    65             
    66             
    67         </script>
    68     </head>
    69     <body>
    70     </body>
    71 </html>

     对象冒充 ,call()  apply()

    共同点:都可以用来代替另一个对象调用一个方法,可以改变this的指向

    不同点:功能一样传入参数的形式不一样。add.apply(sub,[4,2])      add.call(sub,4,2)


    组合继承  原型链 + 对象冒充

    原型链:继承方法

    对象冒充:继承属性

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                
                //对象冒充,借用构造函数
                //call()/apply()
                
                //构造函数
                function Person(_name, _age){
                    //console.log(_name + "," + _age);
                    this.name = _name;
                    this.age = _age;
                    this.run = function(){
                        console.log("跑步");
                    }
                }
                Person.prototype.sex = "男";
                
                //构造函数
                function Man(_name1, _age1){
                    
                    //this = man
                    //对象冒充
                    Person.call(this, _name1, _age1);  //继承Person
                    //Person.apply(this, [_name1, _age1]);
                    
                    //this.name = _name1;
                    //this.age = _age1;
                }
                
                //man对象
                var man = new Man("张三", 33);
                console.log(man.name); //张三
                console.log(man.age); //33
                console.log(man.sex); //undefined, 不能继承父类原型中的属性和方法
                man.run(); //跑步
                
                /*
                //IPad 
                //父类
                function IPad(_color, _type){
                    this.color = _color;
                    this.type = _type;
                    this.playLOL = function(){
                        console.log("玩LOL");
                    }
                }
                
                //IPhone
                //子类
                function IPhone(_color, _type, _size){
                    
                    //对象冒充
                    IPad.call(this, _color, _type);
                    
                    this.size = _size;
                    this.call = function(){
                        console.log("打电话");
                    }
                }
                
                var iphone7 = new IPhone("骚红色", "iphone7", "5.5寸");
                console.log(iphone7.color);
                console.log(iphone7.type);
                console.log(iphone7.size);
                iphone7.playLOL();
                iphone7.call();
                */
                
                
                //组合继承
                //原型链继承: 继承方法
                //对象冒充:继承属性
                //IPad 
                //父类
                function IPad(_color, _type){
                    this.color = _color;
                    this.type = _type;
                }
                IPad.prototype.playLOL = function(){
                    console.log("玩LOL");
                }
                
                //IPhone
                //子类
                function IPhone(_color, _type, _size){
                    IPad.call(this, _color, _type); //对象冒充继承父类IPad的属性
                    this.size = _size;
                }
                IPhone.prototype = new IPad(); //原型链继承父类的方法
                IPhone.prototype.call = function(){
                    console.log("可以打电话");
                }
    
                //实例对象
                var iphone8 = new IPhone("亮黑色", "iphone8", "5.5寸");
                console.log(iphone8.color);
                console.log(iphone8.type);
                console.log(iphone8.size);
                iphone8.playLOL();
                iphone8.call();
                
            </script>
        </head>
        <body>
        </body>
    </html>

    练习

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                
                /*
                 2, 练习:使用组合继承的方式实现以下类的继承
                     父类:Cat
                        方法: eat; 
                        属性: fur
                        说明: eat吃各种东西
                    
                    子类: TomCat
                        方法:eat; catchMouse
                        属性:fur; friend
                        说明:eat只吃面包
                    
                * */
                //父类
                function Cat(_fur){
                    this.fur = _fur;
                }
                Cat.prototype.eat = function(){
                    console.log("吃各种东西");
                }
                
                //子类
                function TomCat(_fur, _friend){
                    Cat.call(this,_fur); //对象冒充继承父类的属性
                    this.friend = _friend;
                }
                TomCat.prototype = new Cat(); //原型链继承父类的方法
                
                TomCat.prototype.catchMouse = function(){
                    console.log("抓老鼠");
                }
                TomCat.prototype.eat = function(){
                    console.log("吃面包");
                }
                
                var tomcat = new TomCat("有皮毛", "有盆友");
                console.log(tomcat.fur);
                console.log(tomcat.friend);
                tomcat.catchMouse();
                tomcat.eat();
    
            </script>
        </head>
        <body>
        </body>
    </html>
  • 相关阅读:
    一个秒杀系统的设计
    2018年终总结-从我所在的团队回首一年技术变迁
    温习LOGO语言
    微信公众平台配置-笔记
    Spring mongotemplate使用
    三种方法实现MNIST 手写数字识别
    Python 实现0-1背包
    Python 实现快速排序和随机快速排序
    Spring+SpringMVC+Mybatis搭建的网站的处理流程总结
    Mybatis功能架构及执行流程
  • 原文地址:https://www.cnblogs.com/1032473245jing/p/7489950.html
Copyright © 2011-2022 走看看