Lesson4:ES6簡易入門(class的基本用法)

class這個概念,在其他編程語言中很早就實現(xiàn)了,而JavaScript語言并沒有實現(xiàn),一直以來,開發(fā)者都是使用函數(shù)function和原型prototype來模擬類class實現(xiàn)面向對象的編程

ES6中JavaScript有了class的概念。但實際上,JavaScript的class本質上也是基于原型prototype的實現(xiàn)方式做了進一步的封裝,使用起來更簡單明了。也就是說它實際上也是函數(shù)function和原型prototype實現(xiàn)。

基本用法

    //定義一個Animal類
    class Animal {
        //構造函數(shù)constructor
        constructor(color){
            this.color = color;
        }
    }

代碼很簡短,通過關鍵字class來聲明一個名字叫Animal的類,可以看到類里面(花括號 {}里面)有一個叫constructor方法,它就是構造方法,構造方法里面的this,指向的是該類實例化后的對象,這就是實現(xiàn)了一個類的聲明。

其中,構造方法constructor是一個類必須要有的方法,默認返回實例對象;創(chuàng)建類的實例對象的時候,會調用此方法來初始化實例對象。如果你沒有編寫constructor方法,執(zhí)行的時候也會被加上一個默認的空的constructor方法。

類的屬性和方法

  class Animal {
        //構造方法
        constructor(name){
            //屬性name
            this.name = name;
        }

        //自定義方法getName
        getName(){
            return this.name;
        }
    }

上面的代碼中,類有2個方法:constructor( )、getName()。

其中constructor方法是構造方法,在實例化一個類的時候被調用。constructor方法是必須的,也是唯一的,一個類不能含有多個constructor構造方法??梢栽诜椒ɡ锩孀远x一些對象的屬性,比如案例中的name屬性。

此外,還自定義了一個getName( )方法,它屬于類的實例方法,實例化后對象可以調用此方法。

類的實例對象

   class Animal {
        //構造方法
        constructor(name){
            //屬性name
            this.name = name;
        }

        //自定義方法getName
        getName(){
            return `This is a${this.name}`;
        }
    }

    //創(chuàng)建一個Animal實例對象dog
    let dog = new Animal('dog');
    dog.name; //結果:dog
    dog.getName(); //結果:This is a dog

通過new來創(chuàng)建了實例對象dog,構造方法會把傳進去的參數(shù)“dog”通過this.name賦值給對象的name屬性,所以dog的name屬性為“dog”,對象dog還可以調用自己的實例方法getName( ),結果返回:“This is a dog”。

創(chuàng)建實例對象的注意點:

  • 必須使用new創(chuàng)建字來創(chuàng)建類的實例對象
  • 先聲明定義類,再創(chuàng)建實例,否則會報錯

類的靜態(tài)方法

   class Animal {
        //構造方法
        constructor(name){
            //屬性name
            this.name = name;
        }

        //自定義一個靜態(tài)方法
        static friends(a1,a2){
            return `${a1.name} and ${a2.name} are friends`;
        }
    }

    //創(chuàng)建2個實例
    let dog = new Animal('dog');
    let cat = new Animal('cat');
    
    //調用靜態(tài)方法friends
    Animal.friends(dog,cat);
    //結果:dog and cat are friends

靜態(tài)方法和實例方法不同的是:靜態(tài)方法的定義需要使用static關鍵字來標識,而實例方法不需要;此外,靜態(tài)方法通過類名來的調用,而實例方法通過實例對象來調用。

類的繼承

ES6使用extends關鍵字來實現(xiàn)子類繼承父類

    //父類Animal
    class Animal {//...}

    //子類Dog
    class Dog extends Animal {
        //構造方法
        constructor(name,color){
            super(name);
            this.color = color;
        }
    }

上面的代碼中,定義兩個類,Animal類作為父類,Dog類作為子類,然后通過關鍵字extends來實現(xiàn)繼承,此外,我們還注意到一個關鍵字super,它相當于是父類中的this。

使用super的注意點:

  • 子類必須在constructor方法中調用super方法
  • 必須先調用super( ),才可以使用this,否則報錯

get和set關鍵字

在class的內部可以使用get和set關鍵字,對某個屬性設置存值函數(shù)和取值函數(shù),攔截該屬性的存取行為。

class MyClass {
  constructor() {
    // ...
  }
  get prop() {
    return 'getter';
  }
  set prop(value) {
    console.log('setter: '+value);
  }
}

let inst = new MyClass();

inst.prop = 123;
// setter: 123

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

相關閱讀更多精彩內容

  • class的基本用法 概述 JavaScript語言的傳統(tǒng)方法是通過構造函數(shù),定義并生成新對象。下面是一個例子: ...
    呼呼哥閱讀 4,200評論 3 11
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數(shù)據交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,332評論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 臨睡時,意外的發(fā)現(xiàn),我最喜愛的公號突然推出了一篇文章。于是困意全無,興沖沖的跑去,閱讀,評論,但每次該作者并不會把...
    王可淇閱讀 679評論 5 5

友情鏈接更多精彩內容