ES6 Class筆記
class:定義類的關鍵字
使用class定義類與使用函數定義類其實沒有多大的差別。
只是使用class定義更清晰易懂。
constructor()方法:類的構造方法,通過new創建對象時會調用該方法。
該方法是類的默認方法,同時也是類必須的方法,
如果一個類沒有顯示的定義,一個空的constructor方法會被默認添加
class 定義類實例
class Person{
constructor(name = \‘es6\‘,age = 6,sex = \‘man\‘){
this.name = name;
this.age = age;
this.sex = sex;
}
logname(){
console.log(this.name);
}
logage(){
console.log(this.age);
}
logsex(){
console.log(this.sex);
}
}
let person = new Person();
person.logname();//es6
person.logage();//6
person.logsex();//man
extends:累的繼承
class Man extends Person{
}
let man = new man();//在這裏會報錯
在子類中必須先調用父類的構造方法。
因為子類沒有自己的this指向,必須先獲取父類的this指向。
class Man extends Person{
constructor(){
super();
}
}
let man = new Man();
Extends 的繼承目標
子類繼承Object類。
這個時候子類其實是父類的復制。子類的對象其實就是Object的對象
class Meobject extends Object{
constructor(){
super();
}
}
let meobj = new Meobject();
let obj = new Object();
console.log(meobj instanceof Object);//true
console.log(obj instanceof Meobject);//false
getPrototypeOf()獲取父類
console.log(Object.getPrototypeOf(meobj));//Object{}
super 關鍵字
1、當super當函數使用時,表示父類的構造方法
2、當super當對象調用方法時,表示父類的對象。同時會綁定子類的this對象
class Man extends Person{
constructor(){
super();
this.name = \‘php\‘;
super.logname();//php
}
}
let man = new Man();
靜態屬性和靜態方法
靜態屬性:
通過直接定義在類上的屬性是靜態屬性
靜態方法
通過static關鍵字定義
靜態屬性與靜態方法都無法繼承
class Person{
constructor(name = \‘es6\‘,age = 6,sex = \‘man\‘){
this.name = name;
this.age = age;
this.sex = sex;
}
static maek(){
console.log(\‘make\‘);
}
}
Person.base = \‘base\‘;
class Man extends Person{
constructor(){
super();
}
}
let man = new Man();
console.log(man.base);//undefined
man.make();//man.make is not a function
ES6 Class筆記