ES6 新特性:Class

定義一個(gè) class

每一個(gè)使用 class 方式定義的類(lèi)默認(rèn)都有一個(gè)構(gòu)造函數(shù) constructor() 函數(shù), 這個(gè)函數(shù)是構(gòu)造函數(shù)的主函數(shù), 該函數(shù)體內(nèi)部的 this 指向生成的實(shí)例。

class Person {
    constructor(name) {
        this.name = name;
    }
    say () {
        console.log("hello " + this.name);
    }
};

tom = new Person('tom')
tom.say()

// 運(yùn)行結(jié)果
hello tom

注意: ES6 中聲明的類(lèi)不存在函數(shù)聲明提前的問(wèn)題, 類(lèi)必須先聲明再使用,否則會(huì)出現(xiàn)異常。




靜態(tài)方法與靜態(tài)屬性

在類(lèi)的內(nèi)部,定義函數(shù)的時(shí)候, 在函數(shù)名前聲明了 static, 那么這個(gè)函數(shù)就為靜態(tài)函數(shù), 就為靜態(tài)方法, 不需要實(shí)例就可調(diào)用:

class Person {
    constructor(name) {
        this.name = name;
    }
    static say () {
        console.log("hello world!");
    }
};

Person.say()

// 運(yùn)行結(jié)果
hello world

只能在類(lèi)定義完畢以后再定義靜態(tài)屬性:

class Person {
    constructor(name) {
        this.name = name;
    }
    say () {
        console.log("hello " + this.name);
    }
};

Person.hands = 2;
console.log(Person.hands);

// 運(yùn)行結(jié)果
2

不能直接定義屬性我們可以使用 setget

class Person {
    constructor(_name) {
        this._name = _name;
    }

    get name() {
        return this._name;
    }
    
    set name(_name) {
        this._name = _name;
    }

    say () {
        console.log("hello " + this.name);
    }
};

// 測(cè)試
var tom = new Person('tom')
tom.name // tom

tom.name = 'tommy'
tom.name // tommy




類(lèi)的繼承 extends

本例中 X_Man 繼承了 Person 類(lèi),使用 extends 關(guān)鍵字表示:

class Person {
    constructor(name) {
        this.name = name;
    }
    say () {
        console.log("hello " + this.name);
    }
};

class X_Man extends Person {
    constructor (name, power) {
        super(name);
        this.power = power;
    }
    show () {
        console.log(this.name + ' has '+ this.power + ' power');
    }
}

logan = new X_Man('logan', 100)
logan.show()

//  運(yùn)行結(jié)果
logan has 100 power

要使用繼承的話, 在子類(lèi)中必須執(zhí)行 super() 調(diào)用父類(lèi), 否者編譯器會(huì)拋錯(cuò)。

在子類(lèi)中的 super 有三種作用, 第一是作為構(gòu)造函數(shù)直接調(diào)用,第二種是作為父類(lèi)實(shí)例, 第三種是在子類(lèi)中的靜態(tài)方法中調(diào)用父類(lèi)的靜態(tài)方法。

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

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 3,146評(píng)論 2 9
  • 整理來(lái)自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工具...
    Ncompass閱讀 1,618評(píng)論 0 6
  • class的基本用法 概述 JavaScript語(yǔ)言的傳統(tǒng)方法是通過(guò)構(gòu)造函數(shù),定義并生成新對(duì)象。下面是一個(gè)例子: ...
    呼呼哥閱讀 4,206評(píng)論 3 11
  • 一:java概述: 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)...
    慕容小偉閱讀 1,948評(píng)論 0 10
  • 爸,去年我想去市團(tuán)委,在我的前途問(wèn)題上,我總愿意跟你講,你離職這么多年,可我總覺(jué)得你可以幫我找到人。我現(xiàn)在清晰的記...
    李彎彎閱讀 176評(píng)論 0 0

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