1. 程式人生 > >js的class基礎

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,反之同理。