class 类
【基礎(chǔ)認(rèn)知】
1、構(gòu)造器中的this指向——類的實(shí)例對(duì)象
2、類中的構(gòu)造器不是必須寫(xiě)的,要對(duì)實(shí)例進(jìn)行一些初始化的操作,如添加指定屬性時(shí)才寫(xiě)。
3、如果A類繼承了B類,且A類中寫(xiě)了構(gòu)造器,那么A類構(gòu)造器中的super時(shí)必須要調(diào)用的。
4、類中鎖定的方法,都是放在了類的原型對(duì)象上,供實(shí)例去使用
class類的基礎(chǔ)使用
(靜態(tài)屬性,只能構(gòu)造函數(shù)訪問(wèn))
(公有屬性,寫(xiě)在構(gòu)造函數(shù).prototype)
? (實(shí)例屬性,定義在實(shí)例對(duì)象this上的屬性)
// 手機(jī)// 實(shí)例成員只能通過(guò)實(shí)例化對(duì)象來(lái)訪問(wèn)// function Phone(brand, price) {// this.brand = brand// this.price = price// }// 添加方法// Phone.prototype.call = function () {// console.log('我可以打電話!!')// }// 實(shí)例化對(duì)象// let Huawei = new Phone('華為', 5999);// Huawei.call();// console.log(Huawei);class Phone {// 構(gòu)造方法 名字不能修改constructor(brand, prive) {this.brand = brand;this.price = prive;}// 方法必須使用該語(yǔ)法,不能使用ES5的對(duì)象完整形式call() {console.log('我可以打電話!!!')}}let onePlus = new Phone('1+', 1999)onePlus.call()console.log(onePlus)class靜態(tài)成員
function Phone() {}// 靜態(tài)成員,屬于類不屬于實(shí)例對(duì)象// 靜態(tài)成員只能通過(guò)構(gòu)造函數(shù)來(lái)訪問(wèn)Phone.name = '手機(jī)'Phone.change = function () {console.log('我可以改變世界')}Phone.prototype.size = '5.5inch'let nokia = new Phone()console.log(nokia.size)//5.5inchconsole.log(nokia.name)// undefinednokia.change()// 報(bào)錯(cuò)說(shuō)不是一個(gè)函數(shù)class Phone1 {// 靜態(tài)屬性static name = '手機(jī)';static change() {console.log('我可以改變世界')}}let aaa = new Phone1();console.log(Phone1.name)//手機(jī)console.log(aaa.name)// undefined構(gòu)造函數(shù)繼承
// 手機(jī)function Phone(brand, price) {this.brand = brandthis.price = price}Phone.prototype.call = function () {console.log('我可以打電話')}// 智能手機(jī)function SmartPhone(brand, price, color, size) {Phone.call(this, brand, price);this.color = colorthis.size = size}// 設(shè)置子集構(gòu)造函數(shù)的原型SmartPhone.prototype = new Phone;SmartPhone.prototype.constructor = SmartPhone;// 聲明子類的方法SmartPhone.prototype.photo = function () {console.log('我可以拍照')}SmartPhone.prototype.playGame = function () {console.log('我可以玩游戲')}const chuizi = new SmartPhone('錘子', 2499, '黑色', '5.5inch');console.log(chuizi)chuizi.photo()chuizi.playGame()類的函數(shù)繼承
// 手機(jī)class Phone {constructor(brand, price) {this.brand = brand;this.price = price;}call() {console.log('我可以電話')}}// 智能手機(jī)class SmartPhone extends Phone {constructor(brand, price, color, size) {//super之前調(diào)用this會(huì)報(bào)錯(cuò)super(brand, price);this.color = color;this.size = size;}photo() {console.log('我可以拍照')}palyGame() {console.log('我可以玩游戲')}}let chuizi = new SmartPhone('錘子', 2999, '黑色', '5.5inch')console.log(chuizi)chuizi.call() //容易出錯(cuò)的地方 忘記寫(xiě)extends, 構(gòu)造函數(shù)中的形參, super()super 這個(gè)關(guān)鍵字,既可以當(dāng)作函數(shù)使用,也可以當(dāng)作對(duì)象使用。在這兩種情況下,它的用法完全不同。
函數(shù):
子類B的構(gòu)造函數(shù)之中的super(),代表調(diào)用父類的構(gòu)造函數(shù)。 super雖然代表了父類A的構(gòu)造函數(shù),但是返回的是子類B的實(shí)例,即super內(nèi)部的this指的是B,因此super()在這里相當(dāng)于A.prototype.constructor.call(this)。
對(duì)象:
在普通方法中,指向父類的原型對(duì)象;在靜態(tài)方法中,指向父類。由于super指向父類的原型對(duì)象,所以定義在父類實(shí)例上的方法或?qū)傩?#xff0c;是無(wú)法通過(guò)super調(diào)用的。
class 作為構(gòu)造函數(shù)的語(yǔ)法糖,同時(shí)有 prototype屬性和__proto__屬性,因此同時(shí)存在兩條繼承鏈。
類的get 和set
// get 和 setclass Phone {get price() {console.log('價(jià)格屬性被讀取了');return 'iloveyou'}set prive(newVal) {// 必須要設(shè)置一個(gè)參數(shù),不然報(bào)錯(cuò)console.log('價(jià)格屬性被修改了')}}// 實(shí)例化對(duì)象let s = new Phone();// console.log(s.price)s.prive = 'free'// 類似于vue的watch和computed 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 宜春到昌吉回族自治州车师古道距离多远
- 下一篇: 自己会用的一些网址