ES6 面向?qū)ο?class 類

新的class寫法只是讓對象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z法而已。

傳統(tǒng)的寫法

<script>
    function People(name){
        this.name=name;     
    }
    
    People.prototype.sayName=function(){
        console.log(this.name);
    }
    
    var p=new People('zl');
    p.sayName();  //zl
</script>

class ES6新寫法

<script>
    class People{   //class開頭寫,
        constructor (name){     //當(dāng)使用new來創(chuàng)建對象,會自動調(diào)用這個函數(shù)
            this.name=name
        }
        sayName(){  //共享的方法(方法會掛載到原型身上)
            console.log(this.name)  
        }
    }
    
    var p=new People('zl');
    p.sayName();  //zl
</script>

ES6的類,完全可以看作構(gòu)造函數(shù)的另一種寫法

constructor中的屬性和方法會自動調(diào)用,sayName中的方法會掛載到原型上,實(shí)現(xiàn)共享

注意:class沒有提升

私有方法:

_bar(baz) {
    return this.snaf = baz;
}

上面代碼中,_bar方法前面的下劃線,表示這是一個只限于內(nèi)部使用的私有方法。但是,這種命名是不保險的,在類的外部,還是可以調(diào)用到這個方
法。

class 里的繼承 extends super

extends [iks?tendz] 延長延續(xù)

語法:

class Cat extends Animal{}

定義一個Cat類,該類通過extends關(guān)鍵字,繼承了Animal類的所有屬性和方法。

例子

class Cat extends Animal{
    constructor(x,y,name){
        super(x,y);
        this.name=name
    }
}

注意:

子類必須在constructor方法中調(diào)用super方法,否則新建實(shí)例時會報錯。這是因?yàn)樽宇悰]有自己的this對象,而是繼承父類的this對象,然后對其進(jìn)行加工。如果不調(diào)用super方法,子類就得不到this對象。

ES5 的繼承,實(shí)質(zhì)是先創(chuàng)造子類的實(shí)例對象this,然后再將父類的方法添加到this上面(Parent.apply(this))。

ES6 的繼承機(jī)制完全不同,實(shí)質(zhì)是
先創(chuàng)造父類的實(shí)例對象this(所以必須先調(diào)用super方法),然后再用子類的構(gòu)造函數(shù)修改this。

靜態(tài)方法 static

class People {
    static print(){
        console.log(100)
    }
}

var p = new People();

p.print()//報錯

所有在類中定義的方法,都會被實(shí)例繼承。如果在一個方法前,加上static關(guān)鍵字,就表示該方法不會被實(shí)例繼承。而是直接通過類來調(diào)用,這就稱為“靜態(tài)方法”

這能這樣調(diào)用
People.print();

父級的靜態(tài)方法可以被子級繼承

繼承后子級可以調(diào)用父級的方法

class Foo {
    static classMethod() {
        console.log('我被繼承了');
    }
}
class Bar extends Foo {
}

Bar.classMethod(); 

ES6規(guī)定class只有靜態(tài)方法沒有靜態(tài)屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容