亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript中使用class和prototype的區(qū)別小結

 更新時間:2023年08月15日 10:36:35   作者:dralexsanderl  
本文將介紹在JavaScript何時使用class以及何時使用prototype,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

本文將介紹在 JavaScript 何時使用class以及何時使用prototype。

prototype

首先先介紹一下prototype的概念,在Javascript中,所有的對象都從原型中繼承屬性和方法。

function Car(brand, vinNumber) {
    this.brand = brand;
    this.vinNumber = vinNumber;
}
Car.prototype.carInfo = function() {
    return {
        brand: this.brand,
        vinNumber: this.vinNumber
    }
}

在創(chuàng)建了上面的Car對象后,就可以使用以下的方式創(chuàng)建一個實例:

const byd = new Car('byd', 'qwuiqbasunqwidn123123');

創(chuàng)建了一個byd實例后,就可以調用carInfo這個方法:

console.log(byd.carInfo());

在這里插入圖片描述

在這種情況下我們還可以通過call或者apaply方法來擴展Car對象來實現(xiàn)不同類型的車輛。

function SportUtilityCar(brand, vinNumber, drivetrain) {
    Car.call(this, brand, vinNumber);
    this.drivetrain = drivetrain;
}

現(xiàn)在,我們就可以創(chuàng)建一個SportUtilityCar的實例而非Car。

const byd = new SportUtilityCar('byd', 'qwuiqbasunqwidn123123', 'AWD');

而且我們還可以通過原型為SportUtilityCar定義一個新版本的carInfo方法。

SportUtilityCar.prototype.carInfo = function() {
    return {
        brand: this.brand,
        vinNumber: this.vinNumber,
        drivetrain: this.drivetrain
    }
}

調用新版本的carInfo方法:

console.log(byd.carInfo());

在這里插入圖片描述

class

ECMAScript 2015js推出了class這個概念。引入class的目標是允許使用更簡單、更干凈的語法創(chuàng)建類。事實上,class只是一個“語法糖”,以使開發(fā)人員能更容易編寫代碼。

將前面用prototype實現(xiàn)的代碼轉換成class。

class Car {
    constructor(brand, vinNumber) {
        this.brand = brand;
        this.vinNumber = vinNumber;
    }
    carInfo() {
        return {
            brand: this.brand,
            vinNumber: this.vinNumber
        }
    }
}
class SportUtilityCar extends Car {
    constructor(brand, vinNumber, drivetrain) {
        super(brand, vinNumber);
        this.drivetrain = drivetrain;
    }
    carInfo() {
        return {
            brand: this.brand,
            vinNumber: this.vinNumber,
            drivetrain: this.drivetrain
        }
    }
}

如果我們需要在類中添加 getter 和 setter,可以通過以下寫法。

class SportUtilityCar extends Car {
    constructor(brand, vinNumber, drivetrain) {
        super(brand, vinNumber);
        this.drivetrain = drivetrain;
    }
    carInfo() {
        return {
            brand: this.brand,
            vinNumber: this.vinNumber,
            drivetrain: this.drivetrain
        }
    }
    get drivetrain() {
        return this._drivetrain;
    }
    set drivetrain(newDrivetrain) {
        this._drivetrain = newDrivetrain;
    }
}

class的語法類似于 Java 或 C# 等語言。class方法允許不通過 Object.prototype 語法而為原型鏈添加屬性和方法。

class 與 prototype 對比

如上所述,JavaScript 中的類只是語法糖,雖然這種方法允許那些來自Java,C#C++等語言的人也可以更加快速的上手javascript,但許多Javascript純粹主義者建議不要使用類。

例如,Michael KrasnovPlease stop using classes in JavaScript文章中提到一個問題:

Binding issues. As class constructor functions deal closely with this keyword, it can introduce potential binding issues, especially if you try to pass your class method as a callback to an external routine.
翻譯: 綁定問題。由于類構造函數(shù)密切處理此關鍵字,因此可能會引入潛在的綁定問題,尤其是在嘗試將類方法作為回調傳遞給外部程序時。

當談到在 JavaScript 中使用類或原型時,我覺得這是一個應該由支持和維護代碼庫的團隊做出的決定。如果他們習慣于原型寫法,那么就應該合理設計他們的組件。但是,如果偏好是利用class概念,則該團隊的開發(fā)人員應該了解上述綁定挑戰(zhàn),但應該繼續(xù)保持在他們的編程習慣。

到此這篇關于javascript中使用class和prototype的區(qū)別小結的文章就介紹到這了,更多相關javascript class和prototype內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js數(shù)組去重的N種方法(小結)

    js數(shù)組去重的N種方法(小結)

    本文給大家收藏整理了js數(shù)組去重的n種方法,大家可以根據(jù)自己需要選擇比較好的方法,感興趣的朋友一起看看吧
    2018-06-06
  • Javascript取整函數(shù)及向零取整幾種常用的方法

    Javascript取整函數(shù)及向零取整幾種常用的方法

    這篇文章主要介紹了Javascript取整函數(shù)及向零取整幾種常用的方法,每種方法都有其特點和適用場景,推薦使用Math.trunc(),因為它語義明確、代碼易讀且性能較好,需要的朋友可以參考下
    2025-01-01
  • JS實現(xiàn)的顏色實時漸變效果完整實例

    JS實現(xiàn)的顏色實時漸變效果完整實例

    這篇文章主要介紹了JS實現(xiàn)的顏色實時漸變效果,結合實例形式分析了JavaScript結合時間函數(shù)定時觸發(fā)動態(tài)改變頁面元素屬性的相關技巧,需要的朋友可以參考下
    2016-03-03
  • js淡入淡出的圖片輪播效果代碼分享

    js淡入淡出的圖片輪播效果代碼分享

    這篇文章主要介紹了js淡入淡出的圖片輪播切換特效,圖片可以隨意替換,文中示例代碼介紹的非常詳細,具有一定的參考價值,推薦給大家,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 微信小程序+mqtt,esp8266溫濕度讀取的實現(xiàn)方法

    微信小程序+mqtt,esp8266溫濕度讀取的實現(xiàn)方法

    這篇文章主要介紹了微信小程序+mqtt,esp8266溫濕度讀取的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • JS使用post提交的兩種方式

    JS使用post提交的兩種方式

    這篇文章主要介紹了JS使用post提交的兩種方式,實例分析了兩種JavaScript使用post提交的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • 文本框(input)獲取焦點(onfocus)時樣式改變的示例代碼

    文本框(input)獲取焦點(onfocus)時樣式改變的示例代碼

    本篇文章主要是對文本框(input)獲取焦點(onfocus)時樣式改變的示例代碼進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • js注入 黑客之路必備!

    js注入 黑客之路必備!

    這篇文章主要為大家詳細介紹了js注入,黑客之路必備!本文告訴大家什么是js注入,如何進行js注入攻防,感興趣的小伙伴們可以參考一下
    2016-09-09
  • layer彈出層擴展主題的方法

    layer彈出層擴展主題的方法

    今天小編就為大家分享一篇layer彈出層擴展主題的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 詳解微信圖片防盜鏈“此圖片來自微信公眾平臺 未經允許不得引用”的解決方案

    詳解微信圖片防盜鏈“此圖片來自微信公眾平臺 未經允許不得引用”的解決方案

    這篇文章主要介紹了詳解微信圖片防盜鏈“此圖片來自微信公眾平臺 未經允許不得引用”的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04

最新評論