• JS_原型和继承之小案例


    原型和继承所谓晕晕乎乎,迷迷糊糊。

    毕竟概念什么的东西看起来又拗口又悬乎,建议还是多应用到自己的代码中去,没事的时候多封装几个对象,函数。多敲敲。

    所谓熟能生巧颇有此意。

    原型:组合使用构造函数和原型模式、动态原型模式、寄生构造函数模式、稳妥构造函数模式。(本文只实现了第一个和第三个(或者说是工厂模式))

    [PS:一直都不懂工厂模式和寄生构造函数模式的区别,求高手指导]

    继承:借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承(本文只实现了寄生组合式继承)

    下面贴代码

    继承:

     1 function Person(name,age){
     2             this.name = name;
     3             this.age = age;
     4             // this.showInfo = function(){
     5             //     alert("my name is "+this.name+",my age is "+this.age)
     6             // }
     7         }
     8 
     9         Person.prototype.showInfo =function(){
    10             alert("my name is "+this.name+",my age is "+this.age)
    11         }
    12 
    13         function Student(name,age,grade){
    14             Person.call(this,name,age);
    15             this.grade = grade;
    16             // this.showGradee = function(){
    17             //     alert("my grade is "+this.grade);
    18             // }
    19         }
    20 
    21         Student.prototype = new Person();
    22 
    23         //一定要放在后面,详细了解原型的实现机制
    24         Student.prototype.showGrade = function(){
    25             alert("my grade is "+this.grade);
    26         }
    27 
    28         var stu = new Student("mary",12,3);
    29 
    30         alert(stu.name);
    31         alert(stu.age);
    32         stu.showInfo();
    33 
    34         alert(stu.grade);
    35         stu.showGrade();

    原型:

      1 var content = document.getElementById("content");
      2 
      3          //工厂模式---寄生式模式
      4          function createCar(brand,color,price){
      5              var car = new Object();
      6              car.brand =  brand;
      7              car.color = color;
      8              car.price = price;
      9 
     10              //匿名函数,showInfo是一个指针,指向该函数
     11              car.showInfo = function(){
     12                  content.innerHTML+=("工厂模式---寄生式模式:"+this.brand+"-"+this.color+"-"+this.price+"<br>");
     13              }
     14 
     15              car.run = function(){
     16                  content.innerHTML+=("工厂模式---寄生式模式:"+this.brand+"-"+this.color+"-正在奔驰!<br>");
     17              }
     18 
     19              car.toString = function(){
     20                  return this.brand+"-"+this.color+"-"+this.price;
     21              }
     22 
     23              return car; 
     24          }
     25 
     26          function carSort(carA,carB){
     27              if(carA instanceof Object && carB instanceof Object){
     28                  if(carA.brand != carB.brand){
     29                      if(carA.brand<carB.brand){
     30                          return -1;
     31                      }
     32                      else if(carA.brand>carB.brand){
     33                          return 1;
     34                      }
     35                  }
     36                  else{
     37                      if(carA.price<carB.price){
     38                          return 1;
     39                      }
     40                      else if(carA.price>carB.price){
     41                          return -1;
     42                      }
     43                      else{
     44                          return 0;
     45                      }
     46                  }
     47              }
     48              else{
     49                  return;
     50              }
     51          }
     52 
     53          var arr1 = new Array();
     54          var carA = createCar("bmw","red","300000");
     55          arr1.push(carA);
     56          carA.showInfo();
     57          carA.run();
     58 
     59          var carB = createCar("bmw","red","200000");
     60          arr1.push(carB);
     61          carB.showInfo();
     62          carB.run();    
     63 
     64          var carC = createCar("abc","black","100000");
     65          arr1.push(carC);
     66          carC.showInfo();
     67          carC.run();    
     68 
     69          arr1.sort(carSort);
     70          content.innerHTML+=("排序之后的结果是"+arr1+"<br><br>")
     71 
     72 
     73          //构造函数
     74          function Car(brand,color,price){
     75              this.brand = brand;
     76              this.color = color;
     77              this.price = price;
     78 
     79              this.showInfo = function(){
     80                  content.innerHTML+=("构造函数:"+this.brand+"-"+this.color+"-"+this.price+"<br>");
     81              }
     82 
     83              this.run = function(){
     84                  content.innerHTML+=("构造函数:"+this.brand+"-"+this.color+"-正在奔驰!<br>");
     85              }
     86 
     87              this.toString = function(){
     88                  return this.brand+"-"+this.color+"-"+this.price;
     89              }
     90 
     91          }
     92 
     93          var arr2 = [];
     94          var carD = new Car("bmw","red","300000");
     95          arr2.push(carD);
     96          carD.showInfo();
     97          carD.run();
     98 
     99          var carE = new Car("bmw","red","200000");
    100          arr2.push(carE);
    101          carE.showInfo();
    102          carE.run();    
    103 
    104          var carF = new Car("abc","black","100000");
    105          arr2.push(carF);
    106          carF.showInfo();
    107          carF.run();    
    108 
    109          arr2.sort(carSort);
    110          content.innerHTML+=("排序之后的结果是"+arr2+"<br><br>");
    111 
    112          //组合使用构造函数和原型
    113          function Cars(brand,color,price){
    114              this.brand = brand;
    115              this.color = color;
    116              this.price = price;
    117          }
    118 
    119          Cars.prototype = {
    120              constructor:Cars,
    121              showInfo:function(){
    122                  content.innerHTML+=("组合使用构造函数和原型:"+this.brand+"-"+this.color+"-"+this.price+"<br>");
    123              },
    124              run : function(){
    125                  content.innerHTML+=("组合使用构造函数和原型:"+this.brand+"-"+this.color+"-正在奔驰!<br>");
    126              },
    127              toString : function(){
    128                  return this.brand+"-"+this.color+"-"+this.price;
    129              }
    130          }
    131 
    132          var arr3 = [];
    133          var carG = new Cars("bmw","red","300000");
    134          arr3.push(carG);
    135          carG.showInfo();
    136          carG.run();
    137 
    138          var carH = new Cars("bmw","red","200000");
    139          arr3.push(carH);
    140          carH.showInfo();
    141          carH.run();    
    142 
    143          var carI = new Cars("abc","black","100000");
    144          arr3.push(carI);
    145          carI.showInfo();
    146          carI.run();    
    147 
    148          arr3.sort(carSort);
    149          content.innerHTML+=("排序之后的结果是"+arr3+"<br><br>");

    以上内容,如有错误请指出,不甚感激。

  • 相关阅读:
    【C# 调用 Go 语言】
    Go语言多线程 (转)
    CodeSoft 2019 企业版打标签
    (转)FFT求频谱图和功率谱密度图
    使用NI-DAQmx进行振动数据采集
    CentOS7 安装配置笔记
    .net 调用 nsfwjs 进行视频鉴别
    Electron.Net + Linux + Blazor 初尝备忘录
    关于feign调用的时候,动态传url ,以及自定义head
    go使用excelize导出xls
  • 原文地址:https://www.cnblogs.com/adelina-blog/p/5884203.html
Copyright © 2020-2023  润新知