clss類
ES6提供了更接近傳統(tǒng)語言的寫法,引入了Class(類)這個概念帽氓,作為對象的模版,通過class關(guān)鍵字俩块,可以定義類黎休。基本上玉凯,ES6的class可以看作只是一個語法糖势腮,它的絕大部分功能,ES5都可以做到漫仆,新的class寫法只是讓對象原型的寫法更加清晰捎拯,更像香香對象編程的語法而已。
定義類
實際上盲厌,類是“特殊的函數(shù)”署照,就想你能夠定義的函數(shù)表達式和函數(shù)聲明一樣門類語法有兩個組成部分:類表達式和類聲明。
類聲明
定義類的一種方法是使用類聲明吗浩。要聲明一個類建芙,你可以使用帶有class關(guān)鍵字的類名(這里是“Phone”)。
class Phone {
constructor(brand, price) {
this.brand = brand;
this.price = price;
}
}
提升
函數(shù)聲明和類聲明之間的一個重要區(qū)別在于懂扼,函數(shù)聲明會提升禁荸,類聲明不會。你首先需要聲明你的類阀湿,然后再訪問它赶熟,否則類似以下的代碼將拋出錯誤(ReferenceError)。
let p = new Phone(); // ReferenceError
class Phone{}
構(gòu)造函數(shù)
constructor方法是一個特殊的方法陷嘴,這種方法用于創(chuàng)建和初始化一個由class
創(chuàng)建的對象映砖。一個類只能擁有一個名為“constructor”的特殊方法。如果類包含多個constructor
的方法罩旋,則將拋出 一個SyntaxError啊央。
一個構(gòu)造函數(shù)可以使用 super
關(guān)鍵字來調(diào)用一個父類的構(gòu)造函數(shù)。
靜態(tài)方法
static
關(guān)鍵字用來定義一個類的一個靜態(tài)方法涨醋。調(diào)用靜態(tài)方法不需要實例化該類瓜饥,但不能通過一個類實例調(diào)用靜態(tài)方法。靜態(tài)方法通常用于為一個應(yīng)用程序創(chuàng)建工具函數(shù)浴骂。
class Phone {
// 靜態(tài)屬性 static屬于類 不屬于實例
static name = '手機'
static change() {
console.log('我可以改變世界乓土!');
}
}
let huawei = new Phone();
console.log(huawei.name); // undefined
console.log(Phone.name); // 手機
繼承 extends
extends
關(guān)鍵字用于類聲明
或者[類表達式]中,以創(chuàng)建一個類,該類是另一個類的子類趣苏。
語法:class ChildClass extends ParentClass { ... }
class Phone {
constructor(brand, price) {
this.brand = brand;
this.price = price;
}
// 父類的成員屬性
call() {
console.log('我可以打電話');
}
}
class SmartPhone extends Phone {
// 構(gòu)造方法
constructor(brand, price, color, size) {
// super 就是父類中的constructor
super(brand, price);
this.color = color;
this.size = size;
}
photo() {
console.log("拍照");
}
play() {
console.log("玩");
}
}
const huawei = new SmartPhone('華為', 199, '黑色', '6.6inch')
huawei.call(); // 我可以打電話
huawei.photo(); // 拍照
huawei.play(); // 玩