1. 程式人生 > >繼承第二節 原型繼承和Es6繼承

繼承第二節 原型繼承和Es6繼承

原型繼承主要是繼承*父類原型上的*屬性或者方法。

 

1.建立一個空的建構函式 2.把空建構函式的原型等於父類的原型 3.把子類的原型等於空建構函式的例項物件

 

這樣就達到了繼承屬性的目的(主要注意:手動修正constructor指向)  
function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.say = function(){
        alert('我的名字'+this.name);
    }
    Person.prototype.runing 
= function(){ alert('我會跑'); } function Coder(name,age,job){ Person.call(this,name,age); this.job = job; }
    function Xhh(){};     Xhh.prototype = Person.prototype;     Coder.prototype=new Xhh;     Coder.prototype.constructor = Coder;//手動改變this的指向     let c = new Coder('a',26,'超級碼農');     console.log(c);//此時c繼承了Person的方法

Es6繼承

class 類 ES6給我們提供了class的語法糖,可以通過class來建立類
具體語法

class 類名 {
constructor(形參){
//構造方法
}
方法名(){

          }
此處是不加,號的
方法名(){

                 }

定義方法:

(1)動態方法:(例項使用的方法)
這樣的寫法就等同於把方法掛在類的原型上了
方法名(){

                 }



(2)靜態方法:(類使用的方法)
static 方法名(){  
                      
                        }

 
 

例如:

class Person {
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        say(){
            console.log('我的名字是'+this.name,'今年'+this.age);
        }
    }

    /*
        宣告子類 extends 父類名 就繼承父類了
    */

    class Coder extends Person {
        /*
            在子類constructor中新增屬性的小技巧

            專屬於子類的屬性寫在引數的前面,父類的屬性放在後面
            這樣一來,就能直接使用...arg

            ...arg
                把函式中的多餘的引數放入陣列中體現出來。

        */
        constructor(job,...arg){
            // console.log(this)
            super(...arg); //等同於呼叫父類,把多餘的引數(和父類一樣的屬性)放到super中,達到繼承父類屬性的目的
            /*
                在繼承裡,寫constructor必須寫super
                super下面才能使用this,super有暫存死區(super上面不能使用this,用了就報錯)
            */
            this.job = job;//自己私有的屬性,直接this點即可
            console.log(arg);
        }
        codeing(){
            console.log('敲程式碼');
        }
        say(){
            console.log('哈哈');
        }

    }

    let c = new Coder('前端','a',20);
    let p = new Person('小明',30);
    console.log(c);
    // c.say();
    // p.say();
    // c.codeing();