1. 程式人生 > 其它 >ES5 和 ES6的繼承

ES5 和 ES6的繼承

ES5:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script>
    //定義建構函式
    function Person(name, age){
      this.name=name;
      this.age=age;
    }
    //在原型 prototype 上定義方法
    Person.prototype.show=
function (){ alert(this.name); alert(this.age); }; //用到類的時候,例項化 new 一個 let p = new Person("blue",18); p.show(); //ES5的繼承------------------------------------------- //定義子類的建構函式 function Worker(name, age, job){ Person.call(this, name, age); this.job=job; } Worker.prototype
=new Person(); //繼承父類的 prototype //繼承父類的prototype後,自身的 constructor 會亂掉,需要還原一下 Worker.prototype.constructor=Worker; //新增 Worker 自己的方法 Worker.prototype.showJob=function (){ alert(this.job); }; let w=new Worker('blue', 18, '打雜的'); w.show(); w.showJob(); </script
> </head> <body> </body> </html>

ES6:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script>
    //ES6的面向物件 ,class 用來專門宣告類的
    class Person{
      constructor(name, age){ // constructor 建構函式
        this.name=name;
        this.age=age;
      }

      show(){ // 直接在class裡面寫方法
        alert(this.name);
        alert(this.age);
      }
    }

    //ES6的繼承--------------------------------------

    class Worker extends Person{  // 告訴系統 Worker 繼承於 Person
      constructor(name, age, job){  // 子類的constructor,引數比父類只多不少
        super(name, age); //調父類的建構函式,用super關鍵字把需要的父類的引數傳過來,需要什麼就傳什麼
        this.job=job; //子類自己的引數
      }

      showJob(){  //加上自己需要的,子類的方法
        alert(this.job);
      }
    }

    //類的使用方法和 ES5 沒什麼不同,例項化
    let w=new Worker('blue', 18, '打雜的');

    w.show(); //調父類的方法
    w.showJob();  //調自己的方法

    /*
      
     */
    </script>
  </head>
  <body>

  </body>
</html>