亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

JavaScript ES6 Class類實現原理詳解

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

JavaScript ES6之前的還沒有Class類的概念,生成實例對象的傳統方法是通過構造函數。

例如:

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

這中寫法跟傳統的面向對象語言差異較大,寫起來也比較繁雜。

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

當然ES6的大部分功能再ES5都能實現,ES6的class可以看作是一個語法糖,只是新的class定義類的寫法讓對象原型的寫法更加簡單明了、更接近與面向對象的編程思想。與上面ES5寫的類使用ES6實現,例如:

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方法,代表這該類的構造方法;并且它的this關鍵字指向著實例對象。這里ES5的構造函數Mold,相當于ES6Mold類的constructor方法。

constructor

ES6實例對象的構造函數就是該類本身;并且當我們new 類名()就是執行了constructor這個函數。

例如:

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

上面代碼Mold類的constructor,實例化對象時執行默認constructor;

任何對象都有構造函數,并且構造函數與當前對象的類是相同;

例如:

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

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

如果子類沒有定義constructor方法,會默認被添加該方法

任何子類都有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 繼承了父類的靜態方法fn()

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

1). 完全繼承,不需要重寫這個方法,子類執行繼承方法內容與父類相同

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

3). 加工,子類可以用super調用父類的方法或屬性進行加工,再加上子類自己的方法和屬性

3. super

調用父類的構造函數直接使用super(),并且可以傳參;

子類的構造函數中,只有調用了super之后才可以使用this關鍵字,否則會報錯;

例如:

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

4. 類的static靜態

在屬性或方法前面使用 static定義類的靜態屬性和方法;

所有的靜態屬性和靜態方法都不能通過實例化的對象調用;

需要通過類來調用,靜態屬性和靜態方法是類的專屬屬性和方法,和實例化對象無關,比如數組和數學方法中的: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 //需要通過類來調用 Mold.fn1(); //aaa console.log(Mold.x);//0

靜態的使用場景:

一般靜態的方法是用來解決一系列該類型的方法;

解決具體類型的方法,不是解決某個具體對象的方法

靜態屬性,一般用于存儲該類型的一系列通用的屬性變量

這種存儲,在類創建的時候就已經變成全局的了,可在任何地方調用,并且不會被自動銷毀

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 奇米影视大全 | 国产看片一区二区三区 | 国产成人18黄网站免费网站 | 亚洲欧美成人影院 | 三级国产在线观看 | 美女批日起爽在线观看 | 久久精品夜色国产 | 123456成年免费视频 | 夜色55夜色66亚洲精品网站 | 欧美精品伊人久久 | 日韩欧美在线综合 | 大伊香蕉在线观看视频 wap | 久久精品国产久精国产果冻传媒 | 国产一区二区久久精品 | 欧美日韩91| 国产一区二区自拍视频 | 大学生久久香蕉国产线看观看 | 日韩欧美一级a毛片欧美一级 | 成人日韩在线观看 | 日韩免费高清一级毛片在线 | xxxxxx国产精品视频 | 国产精品视频久 | 亚洲免费在线视频播放 | 欧美性视频网站 | 久久精品一区 | 精品国产品国语在线不卡丶 | 97久久天天综合色天天综合色 | 国产精品久久久久久麻豆一区 | 亚洲高速浪潮 | 国产精品极品美女自在线看免费一区二区 | 国产老女人 | 黄频在线免费观看 | 日韩中文字幕在线亚洲一区 | 农村寡妇特一级毛片 | 六度国产福利午夜视频黄瓜视频 | 黄 色 成 年人在线 黄 色 成 年人网站 | 国产精品深爱在线 | 国产成人精品日本亚洲18图 | 午夜一级精品免费毛片 | 黄色大片在线观看 | 国产乱人伦精品一区二区 |