歸納整理ES6中的class類知識點

2022-08-08 18:02:07
本篇文章給大家帶來了關於的相關知識,E其中主要介紹了關於class類的相關問題,ES6引入了class類這個概念,通過class關鍵字可以定義類,這就是更符合我們平時所理解的物件導向的語言,下面一起來看一下,希望對大家有幫助。

【相關推薦:、】

class簡介

傳統的JS只有物件的概念,沒有class類的概念,因為JS是基於原型的物件導向語言,原型物件特點就是將屬性全部共用給新物件。

ES6引入了class類這個概念,通過class關鍵字可以定義類,這就是更符合我們平時所理解的物件導向的語言。

class Person{   //定義一個名為Person的類
    // 建構函式,用來接受引數
    constructor(x,y){
        this.x = x;    //this代表的是範例物件
        this.y = y;
    }
    todoSome(){  //這是個類的方法,不需要加function,有多個方法也不用逗號隔開
        alert(this.x + "的年齡是" +this.y+"歲");
    }
}
export default  Person;

靜態方法和靜態屬性

靜態方法和靜態屬性,是使用static關鍵字的屬性和方法

靜態方法

static classMethod(){
		console.log('123456')
	}
  • 靜態方法不會被子類繼承,子類不能呼叫
  • 靜態方法中的this,指向的是類class,不是類的範例。因此靜態方法只能通過類名來呼叫,不能通過範例來呼叫
let p = new Point();
p.classMethod();  // 報錯

靜態屬性

static prop = 1 ;  // 靜態屬性
  • 靜態屬性不能被子類繼承,子類不能呼叫
  • 靜態屬性只能通過類名來呼叫,不能通過類的範例來調

class繼承extends

  • class可以用過extends關鍵字來繼承
  • ES6繼承,子類建構函式中必須使用super()。因為ES6繼承是先將父類別範例物件的屬性和方法,加到this上面,然後再呼叫子類別建構函式修改這個this
  • 如果子類沒有定義constructor方法,super()會預設新增上
  • 子類會繼承父類別的方法和屬性,但是靜態方法和屬性必須通過子類的類名來呼叫
import classtest from "./classtest";  //先引入父類別
class Man extends classtest{
    constructor(x,y){   //建構函式儘量與父類別引數保持一致
        super();   //利用super()關鍵字,這個必須放在子類建構函式中的第一位置
        this.x = x;
        this.y = y;
    }
}
export default  Man;

class的取值函數getter和存值函數setter

getter、setter就是給class的屬性讀值、傳值用的。

取值函數getter和存值函數setter可自定義賦值和取值行為,當一個屬性只有getter沒有setter的時候,這個屬性就是唯讀屬性,不能賦值,第一次初始化也不行。

如果變數定義為私有的(定義在類的花括號外面),就可以只使用getter不使用setter。

let data=[1,2,3,4];  //放在類外面,屬於私有變數,可以唯讀取
class Person{
    // 建構函式
    constructor(x,y){
        this.x = x;
        this.y = y;
    }
    get x(){
        console.log('獲得name');
        return this._name;    //get讀取屬性
    }
    set x(x){
        console.log("設定name");  
        this._name=x;   //set給屬性賦值
    }
    get data(){
        return data;   //唯讀屬性,屬性返回的值只能是私有變數
    }
    todoSome(){
        alert(this.x + "的年齡是" +this.y+"歲");
    }
    static dayin(){
        alert("dayin");
    }
}
export default  Person;

如何使用:

 var test= new this.$myutils.classtest('haha','18');
  test.x="haha3";   //改變了範例化時候的x的值
  test.todoSome();  //輸出:haha3的年齡是18歲。這裡就已經不是範例化時候的haha了
  console.log(test.data);   //結果:列印[1,2,3,4]

注意事項:

1、在類中定義方法時候,不可以給方法加上function關鍵字,因為JS中建構函式是用function定義的,兩個隔開。

2、所有方法不要用逗號隔開,否則會報錯。

【相關推薦:、】

以上就是歸納整理ES6中的class類知識點的詳細內容,更多請關注TW511.COM其它相關文章!