国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Javascript】ES6新增之類的認識

這篇具有很好參考價值的文章主要介紹了【Javascript】ES6新增之類的認識。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在現(xiàn)代編程語言中,類是面向對象編程范式中的核心概念之一。
與函數(shù)類似,類本質上是一種特殊的函數(shù),它允許我們將數(shù)據(jù)和操作封裝在一起,以創(chuàng)建具有共同行為和狀態(tài)的對象。
在類的世界里,我們有類表達式和類聲明,它們各自具有自己的特性和用途。

? 類本質上是一種特殊的函數(shù)。所以和函數(shù)一樣,有類表達式和類聲明

類聲明

函數(shù)不同,類聲明不會被提升。這意味著在使用類之前,需要先進行類聲明。類聲明通常包括構造函數(shù)和其他成員方法。構造函數(shù)是一個特殊的方法,用于創(chuàng)建和初始化類所創(chuàng)建的對象。

// 類聲明
class Rectangle {
  constructor(height, width) {
    this.height = height; // 實例成員
    this.width = width;
  }
}

let p = new Rectangle();

類表達式

  • 類表達式可以命名,也可以不命名
  • 我們可以通過類的name屬性來檢索
// 未命名/匿名類
let Rectangle = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
// output: "Rectangle"

// 命名類
// 命名類表達式的名稱是該類體的局部名稱。
let Rectangle = class Rectangle2 {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name);
// 輸出:"Rectangle2"

類的定義

  • {}中的部分叫做類體。
  • 類體中會包括:
    • 構造函數(shù)

      • constructor方法是一個特殊的方法,這種方法用于創(chuàng)建和初始化一個由class創(chuàng)建的對象。
      • 注意??:一個類體中只能有一個constructor方法
      • 使用 super 關鍵字來調用一個父類的構造函數(shù)
    • 原型方法

      class Rectangle {
        // constructor
        constructor(height, width) {
      // 實例的屬性必須定義在類的方法里
          this.height = height;
          this.width = width;
        }
        // Getter
        get area() {
          return this.calcArea();
        }
        // Method
        calcArea() {
          return this.height * this.width;
        }
      }
      const square = new Rectangle(10, 10);
      
      console.log(square.area);
      // 100
      
    • 靜態(tài)方法

      • static來定義靜態(tài)方法,只能被類訪問
      class Point {
        constructor(x, y) {
          this.x = x;
          this.y = y;
        }
      
        static displayName = "Point";
      
        static distance(a, b) {
          const dx = a.x - b.x;
          const dy = a.y - b.y;
          return Math.hypot(dx, dy);
        }
      }
      
      const p1 = new Point(5, 5);
      const p2 = new Point(10, 10);
      p1.displayName;
      // undefined
      p1.distance;
      // undefined
      
      console.log(Point.displayName);
      // "Point"
      console.log(Point.distance(p1, p2));
      // 7.0710678118654755
      
    • getter和setter

  • 類體中遵循嚴格模式

this指向

類中

  1. 類體中的成員方法遵循嚴格模式。this在類方法中的行為與傳統(tǒng)函數(shù)有所不同。在調用靜態(tài)或原型方法時,this默認指向undefined,但在非嚴格模式下,會自動裝箱以保留傳入狀態(tài)。

  2. 當被調用時。誰調用,指向誰

    class Animal {
    // 原型方法
      speak() {
        return this;
      }
    // 靜態(tài)方法
      static eat() {
        return this;
      }
    }
    
    let obj = new Animal();
    obj.speak(); // Animal {}
    let speak = obj.speak;
    speak(); // undefined
    
    Animal.eat(); // class Animal
    let eat = Animal.eat;
    eat(); // undefined
    

傳統(tǒng)函數(shù)中

在非嚴格模式下調用函數(shù),會發(fā)生自動裝箱。即如果初始值時undefined,則this指向全局對象。

function Animal() {}

Animal.prototype.speak = function () {
  return this;
};

Animal.eat = function () {
  return this;
};

let obj = new Animal();
let speak = obj.speak;
speak(); // global object

let eat = Animal.eat;
eat(); // global object

字段聲明

公有字段

  1. 不需要let, const等關鍵字
  2. 預先聲明
class Rectangle {
  height = 0;
  width;
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

私有字段

  1. 只能在類內部讀取,外部無法調用。
  2. 私有字段僅能在字段聲明中預先定義。
class Rectangle {
  #height = 0;
  #width;
  constructor(height, width) {
    this.#height = height;
    this.#width = width;
  }
}

extends

我們可以創(chuàng)建一個子類來擴展父類的功能。子類繼承了父類的屬性和方法,并可以在其基礎上進行擴展或重寫。

class Father {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

class Son extends Father {
  constructor(name) {
    super(name); // 調用超類構造函數(shù)并傳入 name 參數(shù)
  }

  speak() {
    console.log(`${this.name} barks.`);
  }
}

var d = new Son("Mitzie");
d.speak(); // 'Mitzie barks.'

super

super 關鍵字用于調用對象的父對象上的函數(shù).

class Father {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(this.name + " makes a noise.");
  }
}

class Son extends Father {
  speak() {
    super.speak();
    console.log(this.name + " roars.");
  }
}

| 本文參考:MDN文章來源地址http://www.zghlxwxcb.cn/news/detail-646867.html

到了這里,關于【Javascript】ES6新增之類的認識的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • JavaScript Es6_3筆記

    了解構造函數(shù)原型對象的語法特征,掌握 JavaScript 中面向對象編程的實現(xiàn)方式,基于面向對象編程思想實現(xiàn) DOM 操作的封裝。 了解面向對象編程的一般特征 掌握基于構造函數(shù)原型對象的邏輯封裝 掌握基于原型對象實現(xiàn)的繼承 理解什么原型鏈及其作用 能夠處理程序異常提升程

    2024年02月11日
    瀏覽(23)
  • 【ES6】JavaScript中的Symbol

    【ES6】JavaScript中的Symbol

    Symbol是JavaScript中的一種特殊的、不可變的、不可枚舉的數(shù)據(jù)類型。它通常用于表示一個唯一的標識符,可以作為對象的屬性鍵,確保對象的屬性鍵的唯一性和不可變性。 Symbol.for()是Symbol的一個方法,它用于創(chuàng)建一個已經注冊的Symbol對象。當使用Symbol.for()創(chuàng)建Symbol對象時,會

    2024年02月10日
    瀏覽(28)
  • JavaScript之ES6高級語法(一)

    JavaScript之ES6高級語法(一)

    本文是我在學習過程中記錄學習的點點滴滴,目的是為了學完之后鞏固一下順便也和大家分享一下,日后忘記了也可以方便快速的復習。 今天學習的主要是關于ES6新語法知識的理解和應用 棧負責存放簡單數(shù)據(jù)類型,堆負責存放復雜數(shù)據(jù)類型,但是復雜數(shù)據(jù)類型會把內容存在

    2024年02月09日
    瀏覽(24)
  • JavaScript:ES6中類與繼承

    在JavaScript編程中,ES6引入了一種更現(xiàn)代、更清晰的方式來定義對象和實現(xiàn)繼承,那就是通過類和繼承機制。本文將以通俗易懂的方式解釋ES6中類與繼承的概念,幫助你更好地理解和應用這些特性。 1. 類的創(chuàng)建與使用 類是一種模板,用于創(chuàng)建對象。在ES6中,我們可以使用 cl

    2024年02月13日
    瀏覽(25)
  • 15 JavaScript ES6中的箭頭函數(shù)

    15 JavaScript ES6中的箭頭函數(shù) 什么是箭頭函數(shù) ES6中允許使用=來定義函數(shù)。箭頭函數(shù)相當于匿名函數(shù),并簡化了函數(shù)定義。 基本語法 箭頭函數(shù)在語法上比普通函數(shù)簡潔多。箭頭函數(shù)就是采用箭頭=來定義函數(shù),省去function。 函數(shù)的參數(shù)放在=前面的括號中,函數(shù)體跟在=后的

    2024年02月12日
    瀏覽(20)
  • JavaScript學習筆記01(包含ES6語法)

    Js 最初被創(chuàng)建的目的是“使網頁更生動”。 Js 寫出來的程序被稱為 腳本 ,Js 是一門腳本語言。 被直接寫在網頁的 HTML 中,在頁面加載的時候自動執(zhí)行 腳本被以純文本的形式提供和執(zhí)行,不需要特殊的準備或編譯即可運行(JIN compiler) Js 不僅可以在瀏覽器中執(zhí)行,也可以在

    2024年02月16日
    瀏覽(30)
  • 【ES6】 JavaScript 中的Object.assign

    Object.assign() 是 JavaScript 中的一個方法,它用于復制源對象的所有可枚舉屬性到目標對象。該方法會返回目標對象。 這是其基本用法: 在這個例子中,source 對象的所有可枚舉屬性都被復制到了 target 對象。 需要注意的是,Object.assign() 是淺復制(shallow copy),意味著如果源對

    2024年02月10日
    瀏覽(21)
  • JavaScript版本ES5/ES6及后續(xù)版本

    JavaScript版本ES5/ES6及后續(xù)版本

    Brendan Eich在短短10天內創(chuàng)建了JavaScript的第一個版本。它被稱為摩卡,但已經具備了現(xiàn)代JavaScript的許多基本特性! 為了吸引Java開發(fā)人員,Mocha先是更改為LiveScript,然后又更改為JavaScript然而,JavaScript與Java幾乎沒有任何關系; 微軟推出了IE,從網景復制JavaScript,并稱之為JScript; 由

    2024年02月13日
    瀏覽(33)
  • 【ES6】JavaScript 中的數(shù)組方法reduce

    【ES6】JavaScript 中的數(shù)組方法reduce

    reduce() 是一個 JavaScript 中的數(shù)組方法,它會對數(shù)組的每個元素執(zhí)行一個提供的 reducer 函數(shù),將其減少到一個單一的值。 這是 reduce() 的基本用法: 這里: callback 是一個用于每個數(shù)組元素的函數(shù),接受四個參數(shù): accumulator:累加器累加回調的返回值。它是上一次調用回調時返回

    2024年02月10日
    瀏覽(22)
  • 探索ES6:JavaScript的下一代標準

    ES6,也稱為ECMAScript 2015,是JavaScript的下一代標準,引入了許多新的語言特性和改進,使得JavaScript代碼更加現(xiàn)代化、簡潔和易于維護。本文將介紹ES6的一些主要特性以及它們在JavaScript開發(fā)中的應用。 ES6引入了 let 和 const 來聲明變量。與 var 不同, let 聲明的變量具有塊

    2024年02月22日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包