基本寫法
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,反之同理。