js的class基礎

基本寫法

let log = console.log;
    class people {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
    }
    let aa = new people('張三', '22');
    log(aa);

  • 類的數據類型是函數
  • 類自己就是指向構造函數的
  • 類的方法以前不須要逗號分隔
  • 類中全部的方法都是不可枚舉的

constructor

  • 每一個類都會有一個constructor方法,該方法屬於構造方法。
  • 在new這個對象的時候會執行該方法
  • 該構造方法默認返回實例對象(this)

class表達式

let log = console.log;
    let PeopleClass= class people {
        getName(){
            return people.name;
        }
    }
    let aa = new PeopleClass();
    log(aa.getName());
  • 此處的class類名是people,而不是PeopleClass
  • 若是內部沒有用到類名,也能夠省略類名

類的getter和setter

let log = console.log;
    class people {
        get name() {
            log("小明");
        }
        set name(res) {
            log("設置名字叫:" + res);
        }
    }
    let aa = new people();
    aa.name = 123;
    aa.name;

class的靜態方法和靜態屬性

  • 靜態屬性就是不會被實例繼承的屬性,同理,還會有一種叫實例屬性
  • 目前es6只有靜態方法,沒有靜態屬性
let log = console.log;
    class people {
        static sayName() {
            log("小明");
        }
        sayAge(){
            log("22")
        }
    }
    let aa = new people();
    log(aa);
    aa.sayAge()
    people.sayName();

new.target屬性

  • 該屬性用來獲取當前構造函數是經過什麼方式調用的
  • 子類繼承父類時,調用子類的構造函數時,在父類中的new.target屬性會返回子類的類名
let log = console.log;
    class people {
        constructor() {
            log(new.target)
            log(new.target === people)
        }
    }
    class Speople extends people {
        constructor() {
            super()
        }
    }
    let aa = new Speople();
    let bb = new people();

  • 利用此特色,能夠寫出只能用new命令調用的class
  • 還能夠寫出不能獨立使用,必需要被繼承才能用的class,反之同理。
相關文章
相關標籤/搜索