摘要:不同于其他面向?qū)ο笳Z言,以前的中中沒有類的概念,主要是通過原型的方式來實(shí)現(xiàn)繼承,中引入了原型鏈,并且將原型鏈用來實(shí)現(xiàn)繼承,其核心是利用原型使得一個對象繼承另一個對象的方法和屬性,中原型繼承的關(guān)鍵是將一個實(shí)例的原型對象指向另一個實(shí)例,因此前一
不同于其他面向?qū)ο笳Z言,ES6以前的JavaScript中中沒有class類的概念,主要是通過原型的方式來實(shí)現(xiàn)繼承,JavaScript中引入了原型鏈,并且將原型鏈用來實(shí)現(xiàn)繼承,其核心是利用原型使得一個對象繼承另一個對象的方法和屬性,JavaScript中原型繼承的關(guān)鍵是將一個實(shí)例的原型對象指向另一個實(shí)例,因此前一個實(shí)例便可以獲得后一個實(shí)例原型對象的屬性和方法,例如:
function Father(){ this.age=30; } Father.prototype.work=function(){ return "hard work"; } function Child(){ this.age=10; } //將child的原型指向Father構(gòu)造函數(shù)的實(shí)例 Child.prototype=new Father(); Child.prototype.play=function(){ return "play"; } var child=new Child(); console.log(child.play()) // play console.log(child.work()) // work
看完了上面的JavaScript典型的原型繼承,要回到ES6上面了,ES6中引入了類class 的概念,實(shí)際上是語法糖,很多都與構(gòu)造函數(shù)相關(guān),先看個例子:
// var Man =class{ 這么寫也是可以的 class Man{ constructor(age) { this.age=age; } grow(){ return this.age+1; } } var cala=new Man(22); console.log(cala.grow()); // 23
上面是一個簡單的ES6寫class的例子,可以看到的是,用class關(guān)鍵字定義類,里面的constructor指的是構(gòu)造函數(shù),在構(gòu)造函數(shù)中定義私有屬性,然后接著定義了一個grow方法,最后通過new關(guān)鍵字來實(shí)例化一個對象
在JavaScript中定義類和定義函數(shù)很相似,不過兩者還是有些不同,函數(shù)聲明可以提升,但是類聲明則不行
var cala=new Man(); class Man{} // Man is not defined
ES6中的類使用 extends創(chuàng)建子類,每個類里面都會有一個constructor構(gòu)造函數(shù),實(shí)例化的時候必須用new關(guān)鍵字來調(diào)用類的構(gòu)造函數(shù),一個構(gòu)造函數(shù)可以通過super來調(diào)用另一個構(gòu)造函數(shù)
class Man{ constructor(age) { this.age=age; } static work(){ return "hard work" } } class Cala extends Man{ constructor(age){ super(age); } grow(){ return this.age+1; } } var cala=new Cala(22); console.log(cala.grow()) // 23
ES6中的class支持類支持在原型上定義訪問器get,set屬性
class Man{ constructor(age) { this.age=age; } get getAge(){ return this.age; } set setAge(age){ this.age=age; } } var cala=new Man(22); console.log(cala.getAge) // 22 cala.setAge=33; console.log(cala.getAge) // 33
ES6的class中支持靜態(tài)方法,用關(guān)鍵字static來定義,熟悉面向類與對象的童鞋大多知道,靜態(tài)方法屬于類本身,是通過類來調(diào)用,不能通過實(shí)例來調(diào)用
class Man{ constructor(age) { this.age=age; } static work(){ return "hard work" } } console.log(Man.work()); // hard work var cala=new Man(22); console.log(cala.work()); // cala.work is not a function
結(jié)合上面JavaScript典型的原型繼承和下面的ES6的類,可以看出在使用new關(guān)鍵字實(shí)例化對象的時候,實(shí)際上是調(diào)用了prototype上的構(gòu)造函數(shù),ES6的class本質(zhì)就是語法糖,對于傳統(tǒng)的寫法來說,也是可以在ES6中適用的,類上的方法其實(shí)也就相當(dāng)于定義在prototype上面
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/87281.html
摘要:彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄一完整走了一遍課程,覺得還不錯。支持正版人人有責(zé)零基礎(chǔ)教學(xué)解析彩票項(xiàng)目下面是項(xiàng)目課程的目錄路線一個項(xiàng)目分為三部分業(yè)務(wù)邏輯,自動構(gòu)建系統(tǒng),模擬數(shù)據(jù)和真實(shí)數(shù)據(jù)接口處理。 彩票項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)記錄(一) 完整走了一遍課程,覺得還不錯。 總結(jié): es6的知識點(diǎn)說得還算清楚,主要是為了了解和使用,不是深究,所以淺嘗即止即可,所以覺得還不錯。 完整還原了項(xiàng)目開發(fā)的代碼設(shè)計和開發(fā)過...
摘要:特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...
摘要:謹(jǐn)記,請勿犯這樣的錯誤。由于在之前的教程中,積累了堅實(shí)的基礎(chǔ)。其實(shí),這是有緣由的其復(fù)雜度在早期的學(xué)習(xí)過程中,將會帶來災(zāi)難性的影響。該如何應(yīng)對對于來說,雖然有大量的學(xué)習(xí)計劃需要采取,且有大量的東西需要學(xué)習(xí)。 前言倘若你正在建造一間房子,那么為了能快點(diǎn)完成,你是否會跳過建造過程中的部分步驟?如在具體建設(shè)前先鋪設(shè)好部分石頭?或直接在一塊裸露的土地上先建立起墻面? 又假如你是在堆砌一個結(jié)婚蛋糕...
摘要:謹(jǐn)記,請勿犯這樣的錯誤。由于在之前的教程中,積累了堅實(shí)的基礎(chǔ)。其實(shí),這是有緣由的其復(fù)雜度在早期的學(xué)習(xí)過程中,將會帶來災(zāi)難性的影響。該如何應(yīng)對對于來說,雖然有大量的學(xué)習(xí)計劃需要采取,且有大量的東西需要學(xué)習(xí)。 前言倘若你正在建造一間房子,那么為了能快點(diǎn)完成,你是否會跳過建造過程中的部分步驟?如在具體建設(shè)前先鋪設(shè)好部分石頭?或直接在一塊裸露的土地上先建立起墻面? 又假如你是在堆砌一個結(jié)婚蛋糕...
閱讀 3053·2021-10-20 13:46
閱讀 2575·2021-08-12 13:22
閱讀 2753·2019-08-30 15:54
閱讀 2387·2019-08-30 15:53
閱讀 606·2019-08-30 13:47
閱讀 3633·2019-08-23 16:56
閱讀 1782·2019-08-23 13:02
閱讀 1847·2019-08-23 12:25