Class 基本用法
格式
// 1.聲明形式
class Person {
constructor() {}
speak() {}
}
// 2.表達(dá)式形式
const Person = class {
constructor() {
console.log('constructor');
}
speak() {}
};
new Person();
1、類名首字母一般大寫
2、實(shí)例化時(shí)執(zhí)行構(gòu)造方法,所以必須有構(gòu)造方法contructor,但可以不寫出來(lái)
3、this 代表實(shí)例對(duì)象,上面定義的是實(shí)例屬性/方法
4、一般在構(gòu)造方法中定義屬性,方法不在構(gòu)造方法中定義
Class的屬性和方法
(1)實(shí)例屬性 方法就是值為函數(shù)的特殊屬性。
class Person {
// 屬性是添加到實(shí)例對(duì)象上的
age = 0;
sex = 'male';
// 添加到類的原型對(duì)象上
getSex = function() {
return this.sex;
};
constructor(name, sex) {
// 添加到實(shí)例對(duì)象上
this.name = name;
this.sex = sex;
}
}
const p = new Person('Alex', 'male');
(2)靜態(tài)方法 添加到類本身上
使用static關(guān)鍵字
class Person {
static getSex = function() {
return this.sex;
};
constructor(name) {
this.name = name;
}
}
const p = new Person('Alex');
直接在類上添加
class Person {
constructor(name) {
this.name = name;
}
}
Person.getSex = function() {
return this.sex;
}
const p = new Person('Alex');
(3)靜態(tài)屬性 與靜態(tài)方法使用方式一致
(4)私有屬性和方法 : 一般情況下,類的屬性和方法都是公開(kāi)的 ,公有的屬性和方法可以被外界修改,造成意想不到的錯(cuò)誤
1、_ 開(kāi)頭表示私有
2、將私有屬性和方法移出類
Class的繼承
(1)使用exends關(guān)鍵字實(shí)現(xiàn)繼承,同名屬性子類覆蓋父類
class Person {
constructor(name, sex) {
this.name = name;
this.sex = sex;
this.say = function () {
console.log('say');
};
}
speak() {
console.log('speak');
}
static speak() {
console.log('static speak');
}
}
Person.version = '1.0';
class Programmer extends Person {
constructor(name, sex) {
super(name, sex);
}
}
(1)關(guān)于super
1、super前方不可以有this操作,例如:

2、作為函數(shù)調(diào)用

3、作為函數(shù)使用時(shí),super只能用在子類的構(gòu)造方法中
super雖然代表了父類的構(gòu)造方法,但是內(nèi)部的this指向子類的實(shí)例
4、在構(gòu)造方法中使用或一般方法中使用super
super 代表父類的原型對(duì)象 Person.prototype
所以定義在父類實(shí)例上的方法或?qū)傩?,是無(wú)法通過(guò) super 調(diào)用的
通過(guò) super 調(diào)用父類的方法時(shí),方法內(nèi)部的 this 指向當(dāng)前的子類實(shí)例
// class Person {
// constructor(name) {
// this.name = name;
// console.log(this);
// }
// speak() {
// console.log('speak');
// // console.log(this);
// }
// static speak() {
// console.log('Person speak');
// console.log(this);
// }
// }
// class Programmer extends Person {
// constructor(name, sex) {
// super(name, sex);
// // console.log(super.name);
// // super.speak();
// }
// // hi() {
// // super(); // ×
// // }
// speak() {
// super.speak();
// console.log('Programmer speak');
// }
5、在靜態(tài)方法中使用super
指向父類,而不是父類的原型對(duì)象
通過(guò) super 調(diào)用父類的方法時(shí),方法內(nèi)部的 this 指向當(dāng)前的子類,而不是子類的實(shí)例
6、注意事項(xiàng)
使用 super 的時(shí)候,必須顯式指定是作為函數(shù)還是作為對(duì)象使用,否則會(huì)報(bào)錯(cuò)