久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript ES6 Class類實(shí)現(xiàn)原理詳解

瀏覽:72日期:2023-10-29 17:03:31

JavaScript ES6之前的還沒有Class類的概念,生成實(shí)例對(duì)象的傳統(tǒng)方法是通過構(gòu)造函數(shù)。

例如:

function Mold(a,b){ this.a=a; this.b=b; } Mold.prototype.count=function(){ return this.a+this.b; }; let sum=new Mold(1,2); console.log(sum.count())//3

這中寫法跟傳統(tǒng)的面向?qū)ο笳Z言差異較大,寫起來也比較繁雜。

ES6提供了更加接近其他語言的寫法,引入了Class(類)的概念,作為對(duì)象的模板,可以通過class關(guān)鍵字,定義類(類似python、java等);

當(dāng)然ES6的大部分功能再ES5都能實(shí)現(xiàn),ES6的class可以看作是一個(gè)語法糖,只是新的class定義類的寫法讓對(duì)象原型的寫法更加簡單明了、更接近與面向?qū)ο蟮木幊趟枷搿Ec上面ES5寫的類使用ES6實(shí)現(xiàn),例如:

class Mold{ constructor(a,b){ this.a=a; this.b=b; } count(){ return this.a+this.b; } } let sum=new Mold(1,2); console.log(sum.count())//3

這里ES6的類,只需用class定義,并且類的方法不需要用function定義;還有ES6的constructor方法,代表這該類的構(gòu)造方法;并且它的this關(guān)鍵字指向著實(shí)例對(duì)象。這里ES5的構(gòu)造函數(shù)Mold,相當(dāng)于ES6Mold類的constructor方法。

constructor

ES6實(shí)例對(duì)象的構(gòu)造函數(shù)就是該類本身;并且當(dāng)我們new 類名()就是執(zhí)行了constructor這個(gè)函數(shù)。

例如:

class Mold{ constructor(){console.log('aaa') } } let m=new Mold();// aaa console.log(m.constructor===Mold);//true

上面代碼Mold類的constructor,實(shí)例化對(duì)象時(shí)執(zhí)行默認(rèn)constructor;

任何對(duì)象都有構(gòu)造函數(shù),并且構(gòu)造函數(shù)與當(dāng)前對(duì)象的類是相同;

例如:

let arr=new Array(); console.log(arr.constructor===Array);//true let str=new String(); console.log(str.constructor===String);//true let obj=new Object(); console.log(obj.constructor===Object);//true

2. 類的繼承 extends

繼承父類后,子類會(huì)繼承父類所有的方法和屬性(包括靜態(tài)方法和屬性)

如果子類沒有定義constructor方法,會(huì)默認(rèn)被添加該方法

任何子類都有constructor方法;

例如:

//class 類名 extends 被繼承的類{}Class Father{ constructor(){ } sum(){ console.log('abc'); } static fn(){ console.log('hello') } } Class Son extends Father{ } let s=new Son(); s.sum()//abc,繼承了父類的sum()方法 Son.fn()//hello 繼承了父類的靜態(tài)方法fn()

繼承后的子類方法的三種處理:

1). 完全繼承,不需要重寫這個(gè)方法,子類執(zhí)行繼承方法內(nèi)容與父類相同

2). 重寫覆蓋,只需要在這個(gè)類中重寫這個(gè)方法就可以覆蓋繼承過來的內(nèi)容

3). 加工,子類可以用super調(diào)用父類的方法或?qū)傩赃M(jìn)行加工,再加上子類自己的方法和屬性

3. super

調(diào)用父類的構(gòu)造函數(shù)直接使用super(),并且可以傳參;

子類的構(gòu)造函數(shù)中,只有調(diào)用了super之后才可以使用this關(guān)鍵字,否則會(huì)報(bào)錯(cuò);

例如:

//super.父類函數(shù)(); class Father{ constructor(){ console.log('bbb'); } } class Son extends Father{ constructor(x){ this.x=x;//ReferenceError,報(bào)錯(cuò) super(); this.x=x;//正確 } } let sum=new Son();//bbb

4. 類的static靜態(tài)

在屬性或方法前面使用 static定義類的靜態(tài)屬性和方法;

所有的靜態(tài)屬性和靜態(tài)方法都不能通過實(shí)例化的對(duì)象調(diào)用;

需要通過類來調(diào)用,靜態(tài)屬性和靜態(tài)方法是類的專屬屬性和方法,和實(shí)例化對(duì)象無關(guān),比如數(shù)組和數(shù)學(xué)方法中的:Array.from();Math.random()。

例如:

class Mold{ static x=0; y=1; static fn1(){ console.log('aaa') } fn2(){ console.log('bbb'); } } let m=new Mold(); console.log(m.x,m.y);//undefined , 1 m.fn1(); // TypeError m.fn2(); // bbb //需要通過類來調(diào)用 Mold.fn1(); //aaa console.log(Mold.x);//0

靜態(tài)的使用場(chǎng)景:

一般靜態(tài)的方法是用來解決一系列該類型的方法;

解決具體類型的方法,不是解決某個(gè)具體對(duì)象的方法

靜態(tài)屬性,一般用于存儲(chǔ)該類型的一系列通用的屬性變量

這種存儲(chǔ),在類創(chuàng)建的時(shí)候就已經(jīng)變成全局的了,可在任何地方調(diào)用,并且不會(huì)被自動(dòng)銷毀

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久久久久久一区 | 亚洲综合电影 | 亚洲精品一区在线观看 | 成人午夜精品 | 黄色片免费| 青青久久网| av天天网| 精品国产一区二区在线 | 国产一区| 最近的中文字幕在线看视频 | 欧美日韩亚洲成人 | 欧美日韩一区二区在线观看 | av中文字幕在线播放 | 国产精品九九九 | 成人欧美一区二区三区黑人孕妇 | 国产精品成人在线观看 | 免费一级毛片 | 国产精品国产a级 | 国产精品人人做人人爽人人添 | 亚洲一区二区三区中文字幕 | 欧美精品一区二区三区视频 | 色综合一区二区三区 | 福利二区 | 91精品国产综合久久国产大片 | 日韩精品av一区二区三区 | 国产精品美女久久久久久免费 | 成人a视频| 国产精品国产成人国产三级 | 久久综合伊人77777 | 在线观看日韩av | 天天夜碰日日摸日日澡 | 国产精品视频一区二区三区不卡 | 日韩视频网 | 久久中文字幕一区 | 国产精品三级久久久久久电影 | 中文字幕在线视频观看 | 日日日操 | 天堂一区二区三区在线 | 99精品视频在线 | 欧美在线播放一区二区三区 | 龙珠z普通话国语版在线观看 |