日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态

發(fā)布時間:2024/7/5 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、認(rèn)識class定義類

我們會發(fā)現(xiàn),按照前面的構(gòu)造函數(shù)形式創(chuàng)建 類,不僅僅和編寫普通的函數(shù)過于相似,而且代碼并不容易理解。

  • 在ES6(ECMAScript2015)新的標(biāo)準(zhǔn)中使用了class關(guān)鍵字來直接定義類;
  • 但是類本質(zhì)上依然是前面所講的構(gòu)造函數(shù)、原型鏈的語法糖而已;
  • 所以學(xué)好了前面的構(gòu)造函數(shù)、原型鏈更有利于我們理解類的概念和繼承關(guān)系;

那么,如何使用class來定義一個類呢?

  • 可以使用兩種方式來聲明類:類聲明和類表達(dá)式;

二、類和構(gòu)造函數(shù)的異同

我們來研究一下類的一些特性:

  • 你會發(fā)現(xiàn)它和我們的構(gòu)造函數(shù)的特性其實(shí)是一致的;

三、類的構(gòu)造函數(shù)

如果我們希望在創(chuàng)建對象的時候給類傳遞一些參數(shù),這個時候應(yīng)該如何做呢?

  • 每個類都可以有一個自己的構(gòu)造函數(shù)(方法),這個方法的名稱是固定的constructor;
  • 當(dāng)我們通過new操作符,操作一個類的時候會調(diào)用這個類的構(gòu)造函數(shù)constructor
  • 每個類只能有一個構(gòu)造函數(shù),如果包含多個構(gòu)造函數(shù),那么會拋出異常;

當(dāng)我們通過new關(guān)鍵字操作類的時候,會調(diào)用這個constructor函數(shù),并且執(zhí)行如下操作:

  • 在內(nèi)存中創(chuàng)建一個新的對象(空對象);
  • 這個對象內(nèi)部的[[prototype]]屬性會被賦值為該類的prototype屬性;
  • 構(gòu)造函數(shù)內(nèi)部的this,會指向創(chuàng)建出來的新對象;
  • 執(zhí)行構(gòu)造函數(shù)的內(nèi)部代碼(函數(shù)體代碼);
  • 如果構(gòu)造函數(shù)沒有返回非空對象,則返回創(chuàng)建出來的新對象;
  • 四、類的實(shí)例方法

    在上面我們定義的屬性都是直接放到了this上,也就意味著它是放到了創(chuàng)建出來的新對象中:

    • 在前面我們說過對于實(shí)例的方法,我們是希望放到原型上的,這樣可以被多個實(shí)例來共享:

    • 但是在類中,我們可以直接在類中定義;

    五、類的訪問器方法

    我們之前講對象的屬性描述符時有講過對象可以添加setter和getter函數(shù)的,那么類也是可以的:

    六、類的靜態(tài)方法

    靜態(tài)方法通常用于定義直接使用類來執(zhí)行的方法,不需要有類的實(shí)例,使用static關(guān)鍵字來定義:

    七、ES6類的繼承 - extends

    前面我們花了很大的篇幅討論了在ES5中實(shí)現(xiàn)繼承的方案,雖然最終實(shí)現(xiàn)了相對滿意的繼承機(jī)制,但是過程卻依然是非常繁瑣的。

    • 在ES6中新增了使用extends關(guān)鍵字,可以方便的幫助我們實(shí)現(xiàn)繼承

    八、super關(guān)鍵字

    我們會發(fā)現(xiàn)在上面的代碼中我使用了一個super關(guān)鍵字,這個super關(guān)鍵字有不同的使用方式:

    • 注意:在子(派生)類的構(gòu)造函數(shù)中使用this或者返回默認(rèn)對象之前,必須先通過super調(diào)用父類的構(gòu)造函數(shù)!
    • super的使用位置有三個:子類的構(gòu)造函數(shù)、實(shí)例方法、靜態(tài)方法;
  • super在子類的構(gòu)造函數(shù)使用:

  • super在實(shí)例方法中使用

  • super在靜態(tài)方法中使用

  • 原型繼承關(guān)系圖:

    子類對父類方法的重寫:

    九、繼承內(nèi)置類

    我們也可以讓我們的類繼承自內(nèi)置類,比如Array:

    十、類的混入mixin

    JavaScript的類只支持單繼承:也就是只能有一個父類

    • 那么在開發(fā)中我們我們需要在一個類中添加更多相似的功能時,應(yīng)該如何來做呢?
    • 這個時候我們可以使用混入(mixin);

    在react中的高階組件

    十一、JavaScript中的多態(tài)

    面向?qū)ο蟮娜筇匦?#xff1a;封裝、繼承、多態(tài)。

    • 前面兩個我們都已經(jīng)詳細(xì)解析過了,接下來我們討論一下JavaScript的多態(tài)。

    JavaScript有多態(tài)嗎?

    • 維基百科對多態(tài)的定義:多態(tài)(英語:polymorphism)指為不同數(shù)據(jù)類型的實(shí)體提供統(tǒng)一的接口,或使用一個單一的符號來表示多個不同的類型。
    • 非常的抽象,個人的總結(jié):不同的數(shù)據(jù)類型進(jìn)行同一個操作,表現(xiàn)出不同的行為,就是多態(tài)的體現(xiàn)。

    那么從上面的定義來看,JavaScript是一定存在多態(tài)的

    總結(jié)

    以上是生活随笔為你收集整理的JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。