最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript?ES6?Class類全方位進(jìn)階指南

 更新時(shí)間:2026年04月03日 08:38:03   作者:發(fā)現(xiàn)一只大呆瓜  
在ES6中class(類)作為對象的模板被引入,可以通過class關(guān)鍵字定義類,這篇文章主要介紹了JavaScript ES6 Class類全方位進(jìn)階指南的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在 ES6 之前,JavaScript 開發(fā)者必須通過構(gòu)造函數(shù)和原型鏈(prototype)來模擬“類”的行為,代碼既冗長又容易出錯(cuò)。ES6 引入了 class 關(guān)鍵字,雖然它本質(zhì)上是語法糖,但它讓 JavaScript 的面向?qū)ο缶幊套兊酶忧逦蜆?biāo)準(zhǔn)。

一、 基礎(chǔ):類的定義與實(shí)例化

class 將構(gòu)造函數(shù)(constructor)和原型方法(speak)統(tǒng)一封裝在一個(gè)大括號(hào)內(nèi)。

class Animal {
    // 構(gòu)造函數(shù):每當(dāng) new 一個(gè)實(shí)例時(shí)自動(dòng)調(diào)用
    constructor(name) {
        this.name = name; // 實(shí)例屬性
    }
    // 原型方法:定義在 Animal.prototype 上,供所有實(shí)例共享
    speak() {
        console.log(`${this.name} speak!!!`);
    }
}
const dog = new Animal('dog');
dog.speak(); // dog speak!!!

二、 繼承:extends 與 super 的力量

繼承讓子類可以復(fù)用父類的邏輯。在子類中,super 是連接父類的橋梁。

核心規(guī)則

  1. 必須調(diào)用 super:子類如果沒有自己的 constructor,引擎會(huì)默認(rèn)添加。如果有,則必須在訪問 this 之前調(diào)用 super() ,否則會(huì)報(bào)錯(cuò)。
  2. 方法復(fù)用:可以使用 super.methodName() 調(diào)用父類的普通方法。
class Animal {
    constructor(name) {
        this.name = name;
    }
    eat() {
        return `${this.name} needs food`;
    }
}
class Cat extends Animal {
    constructor(name, color) {
        // 1. 調(diào)用父類構(gòu)造函數(shù)(傳遞 name)
        super(name); 
        this.color = color;
    }
    eatFood() {
        // 2. 通過 super 調(diào)用父類的原型方法
        console.log(`${this.name} is ${this.color}, ${super.eat()}`);
    }
}
const mimi = new Cat('mimi', 'white');
mimi.eatFood(); // mimi is white, mimi needs food

三、 靜態(tài)成員:static 關(guān)鍵字

static 定義的屬性和方法屬于類本身,而不是實(shí)例。

注意事項(xiàng)

  • 不可繼承:實(shí)例對象無法訪問靜態(tài)方法。
  • this 指向:靜態(tài)方法中的 this 指向的是 類本身,而不是實(shí)例。
class Animal {
    static feet = 4; // 靜態(tài)屬性
    static eat() {
        // 注意:這里的 this 指向 Animal 類本身
        console.log(`${this.name} is eating`); // 這里的 this.name 輸出的是 "Animal"(類的名字)
    }
}
const cat = new Animal();
console.log(cat.feet);      // undefined (實(shí)例無法訪問)
console.log(Animal.feet);   // 4 (類直接訪問)
Animal.eat();               // "Animal is eating"

四、 面試模擬題

Q1:ES6 的 class 聲明和普通 function 構(gòu)造函數(shù)有什么區(qū)別?

參考回答:

  1. 嚴(yán)格模式class 內(nèi)部默認(rèn)就是嚴(yán)格模式。
  2. 變量提升class 不存在變量提升(存在暫時(shí)性死區(qū)),必須先定義后使用。
  3. 調(diào)用方式class 必須配合 new 調(diào)用,直接調(diào)用會(huì)報(bào)錯(cuò);而普通構(gòu)造函數(shù)可以作為普通函數(shù)執(zhí)行。
  4. 原型方法class 定義的方法是不可枚舉的。

Q2:子類構(gòu)造函數(shù)中為什么必須先調(diào)用super()?

參考回答:

在 ES5 的繼承中,是先創(chuàng)建子類的 this,然后再將父類的方法屬性添加到 this 上。

但在 ES6 的繼承中,是先創(chuàng)建父類的實(shí)例對象 this(通過 super()),然后再用子類的構(gòu)造函數(shù)修改這個(gè) this。如果不調(diào)用 super(),子類就拿不到 this 對象。

Q3:如何用 ES5 模擬class的靜態(tài)方法?

參考回答:

在 ES5 中,直接將方法掛載到構(gòu)造函數(shù)函數(shù)名上即可:

function Animal() {}
Animal.eat = function() { console.log('eating'); }; // 模擬靜態(tài)方法

五、 總結(jié)

關(guān)鍵字用途核心點(diǎn)
constructor初始化實(shí)例new 的時(shí)候自動(dòng)觸發(fā)
extends建立原型繼承子類原型指向父類原型
super指向父類構(gòu)造函數(shù)中必須首行調(diào)用
static定義類私有成員只能由類名直接調(diào)用

到此這篇關(guān)于JavaScript ES6 Class類全方位進(jìn)階指南的文章就介紹到這了,更多相關(guān)ES6 Class類指南內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 小程序中實(shí)現(xiàn)自定義頭部導(dǎo)航組件的詳細(xì)過程

    小程序中實(shí)現(xiàn)自定義頭部導(dǎo)航組件的詳細(xì)過程

    這篇文章主要介紹了小程序中實(shí)現(xiàn)自定義頭部導(dǎo)航組件的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • JavaScript中定時(shí)器setTimeout()和setInterval()的用法

    JavaScript中定時(shí)器setTimeout()和setInterval()的用法

    本文詳細(xì)講解了JavaScript中定時(shí)器setTimeout()和setInterval()的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • webpack常用配置總覽(小結(jié))

    webpack常用配置總覽(小結(jié))

    這篇文章主要介紹了webpack常用配置總覽(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • js CSS3實(shí)現(xiàn)卡牌旋轉(zhuǎn)切換效果

    js CSS3實(shí)現(xiàn)卡牌旋轉(zhuǎn)切換效果

    這篇文章主要為大家詳細(xì)介紹了js CSS3實(shí)現(xiàn)卡牌旋轉(zhuǎn)切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 利用Javascript判斷操作系統(tǒng)的類型實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性

    利用Javascript判斷操作系統(tǒng)的類型實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性

    在通過Javascript實(shí)現(xiàn)客戶端和服務(wù)端的交互時(shí),有時(shí)候需要對操作系統(tǒng)進(jìn)行判斷,以便實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性;從而實(shí)現(xiàn)網(wǎng)站在跨平臺(tái)瀏覽時(shí)候保持良好的用戶體驗(yàn),感興趣的朋友可以了解下啊,或許對你有所幫助
    2013-01-01
  • JavaScript深拷貝與淺拷貝原理深入探究

    JavaScript深拷貝與淺拷貝原理深入探究

    深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對基本類型和引用類型的理解深度,這篇文章主要給大家介紹了關(guān)于js深拷貝和淺拷貝的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 小程序顯示彈窗時(shí)禁止下層的內(nèi)容滾動(dòng)實(shí)現(xiàn)方法

    小程序顯示彈窗時(shí)禁止下層的內(nèi)容滾動(dòng)實(shí)現(xiàn)方法

    這篇文章主要介紹了小程序顯示彈窗時(shí)禁止下層的內(nèi)容滾動(dòng)實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • JavaScript生成一個(gè)不重復(fù)的ID的方法示例

    JavaScript生成一個(gè)不重復(fù)的ID的方法示例

    這篇文章主要介紹了JavaScript生成一個(gè)不重復(fù)的ID的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JS中的構(gòu)造函數(shù)詳細(xì)解析

    JS中的構(gòu)造函數(shù)詳細(xì)解析

    本篇文章主要是對JS中的構(gòu)造函數(shù)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • js日歷功能對象

    js日歷功能對象

    問題產(chǎn)生需求:做OA時(shí)弄到 備忘這個(gè)功能,想以日歷的形式展現(xiàn)
    2012-01-01

最新評論

黑水县| 忻城县| 儋州市| 辰溪县| 闽清县| 安岳县| 正蓝旗| 凤翔县| 二连浩特市| 大冶市| 喀喇沁旗| 郯城县| 乌兰县| 罗源县| 金秀| 泌阳县| 嘉禾县| 肇东市| 石家庄市| 合江县| 泾阳县| 应用必备| 陆川县| 泰州市| 淮阳县| 温州市| 侯马市| 古浪县| 天全县| 宝兴县| 裕民县| 新巴尔虎左旗| 左云县| 阿瓦提县| 青田县| 嘉兴市| 新乐市| 肥西县| 通江县| 北流市| 乌什县|