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

javascript中Class(類)的介紹和使用方法

 更新時間:2024年05月10日 08:35:38   作者:ZSK6  
在JavaScript中類(Class)是一種創(chuàng)建對象的模板,它可以用來定義對象的屬性和方法,這篇文章主要給大家介紹了關(guān)于javascript中Class(類)的介紹和使用方法的相關(guān)資料,需要的朋友可以參考下

簡言

在面向?qū)ο缶幊讨校╫bject-oriented programming), 一個 類 定義了一個對象(object’s)的特征。類是定義對象屬性(properties)和方法(methods)的模板,是用來繪制具體對象實例的“藍圖”。

js中類是用于創(chuàng)建對象的模板,他們用代碼封裝數(shù)據(jù)以處理該數(shù)據(jù),JS 中的類建立在原型上的。

雖然js通過構(gòu)造函數(shù)和原型鏈也能實現(xiàn)面向?qū)ο缶幊痰奶匦?,但是直接實現(xiàn)的話比較復(fù)雜,所以JavaScript 提供了Class(類)模型,它是把面向?qū)ο缶幊烫匦詮脑偷幕A(chǔ)上實現(xiàn)的,從而能夠更為直觀地在 JavaScript 中使用基于類的面向?qū)ο缶幊讨械母拍睢?/p>

Class(類)

實際上,類是“特殊的函數(shù)”,就像你能夠定義的函數(shù)表達式和函數(shù)聲明一樣。

定義類

類語法有兩個組成部分:類表達式和類聲明。類聲明和類表達式的主體都執(zhí)行在嚴格模式下。比如,構(gòu)造函數(shù),靜態(tài)方法,原型方法,getter 和 setter 都在嚴格模式下執(zhí)行。

類聲明

定義類的一種方法是使用類聲明。要聲明一個類,你可以使用帶有class關(guān)鍵字的類名。

類聲明不會提升。你首先需要聲明你的類,然后再訪問它,否則將拋出ReferenceError

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

類表達式

類表達式是定義類的另一種方法。類表達式可以命名或不命名。命名類表達式的名稱是該類體的局部名稱。(不過,可以通過類的 (而不是一個實例的) 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"

類體和方法定義

一個類的類體是一對花括號/大括號 {} 中的部分。這是你定義類成員的位置,如方法或構(gòu)造函數(shù)。

constructor方法是一個特殊的方法,這種方法用于創(chuàng)建和初始化一個由class創(chuàng)建的對象。一個類只能擁有一個名為“constructor”的特殊方法。如果類包含多個constructor的方法,則將拋出 一個SyntaxError 。

一個構(gòu)造函數(shù)可以使用 super 關(guān)鍵字來調(diào)用一個父類的構(gòu)造函數(shù)。

類里面的方法和對象里的方法寫法一樣,不過它可以加些特殊的修飾詞,修飾詞不同作用不同,例如加 static就變了靜態(tài)方法,添加#就變成了私有方法。

類的 constructor

constructor 是一種用于創(chuàng)建和初始化class創(chuàng)建的對象的特殊方法。
constructor函數(shù)創(chuàng)建類對象實例時的new息息相關(guān)。

語法

constructor([arguments]) { ... }

特點

  • 在一個類中只能有一個名為“constructor”的特殊方法。一個類中出現(xiàn)多次構(gòu)造函數(shù) (constructor)方法將會拋出一個 SyntaxError 錯誤。

  • 在一個構(gòu)造方法中可以使用super關(guān)鍵字來調(diào)用一個父類的構(gòu)造方法。

  • 如果沒有顯式指定構(gòu)造方法,則會添加默認的 constructor 方法。

  • 如果不指定一個構(gòu)造函數(shù) (constructor) 方法,則使用一個默認的構(gòu)造函數(shù) (constructor)。

對于基類,默認構(gòu)造函數(shù)是:

constructor() {}

對于派生類(有祖先類)的默認構(gòu)造函數(shù):

constructor(...args) {
  super(...args);
}

例子

class Polygon {
  constructor() {
    this.name = "Polygon";
  }
}

class Square extends Polygon {
  constructor() {
    super();
  }
}

class Rectangle {}

Object.setPrototypeOf(Square.prototype, Rectangle.prototype);

console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true

let newInstance = new Square();
console.log(newInstance.name); //Polygon

類繼承(extends)

extends 關(guān)鍵字用于類聲明或者類表達式中,以創(chuàng)建一個類,該類是另一個類的子類,也叫派生類。
特點

  • 派生類創(chuàng)建構(gòu)造函數(shù)時要帶上super(),不然會報錯。
  • 派生類會繼承類的方法和屬性,并可以在類實例和類體中使用。
  • 派生類重寫的同名方法和屬性,將會覆蓋基類的方法和屬性。
class Animal {
  name = "";
  constructor(name) {
    this.name = name;
  }
  eat() {
    console.log("吃東西");
  }
}
class Cat extends Animal {
  constructor(name, color) {
    super(name);
    //  通過this可獲取祖先類的屬性
    this.color = color;
  }
  skill() {
    console.log(this.name + "抓老鼠");
  }
  eat2() {
    //  通過this可獲取祖先類的方法
    this.eat();
    console.log(`${this.color}貓` + this.name + "吃東西");
  }
}
const tom = new Cat("湯姆", "skyblue");
tom.eat2(); //  繼承Animal的方法
tom.skill();

類體中的修飾詞

私有屬性和方法(#)

類屬性在默認情況下是公有的,但可以使用增加哈希前綴 # 的方法來定義私有類字段(私有屬性和方法統(tǒng)稱私有字段)。

class ClassWithPrivateField {
  #privateField;
}

class ClassWithPrivateMethod {
  #privateMethod() {
    return "hello world";
  }
}

class ClassWithPrivateStaticField {
  static #PRIVATE_STATIC_FIELD;
}

class ClassWithPrivateStaticMethod {
  static #privateStaticMethod() {
    return "hello world";
  }
}

私有字段分為私有實例字段和私有靜態(tài)字段:

  • 私有實例字段使用 #名稱(發(fā)音為“哈希名稱”)聲明,這些名稱以 # 開頭。即 # 是名稱本身的一部分,聲明和訪問時也需要加上。它只能在類體中訪問和修改,不能在外面直接使用和修改。
  • 私有靜態(tài)字段。在私有實例字段前面加 static。在類體中只能通過類本身調(diào)用和修改。
class Obj {
  #name = ""; //  私有,只能在里面使用
  static #age = 18; //  私有,只能在里面被類本身使用
  constructor(name, age) {
    this.#name = name;
    Obj.#age = age;
  }
  base() {
    console.log(`${this.#name}   ${Obj.#age}`);
  }
}
const obj1 = new Obj("hh", 20);
obj1.base();

靜態(tài)屬性和方法(static)

類(class)通過 static 關(guān)鍵字定義靜態(tài)方法。不能在類的實例上調(diào)用靜態(tài)方法,而應(yīng)該通過類本身調(diào)用。這些通常是實用程序方法,例如創(chuàng)建或克隆對象的功能。

特點:

  • 靜態(tài)方法調(diào)用同一個類中的其他靜態(tài)方法,可使用 this 關(guān)鍵字。
  • 靜態(tài)方法調(diào)用直接在類上進行,不能在類的實例上調(diào)用。
  • 非靜態(tài)方法中,不能直接使用 this 關(guān)鍵字來訪問靜態(tài)方法。而是要用類名來調(diào)用或者用構(gòu)造函數(shù)的屬性來調(diào)用該方法。
class Tripple {
  static tripple(n = 1) {
    return n * 3;
  }
}

class BiggerTripple extends Tripple {
  static tripple(n) {
    return super.tripple(n) * super.tripple(n);
  }
}

console.log(Tripple.tripple()); // 3
console.log(Tripple.tripple(6)); // 18

let tp = new Tripple();

console.log(BiggerTripple.tripple(3)); // 81(不會受父類實例化的影響)
console.log(tp.tripple()); // 'tp.tripple 不是一個函數(shù)'.

公有字段

公有靜態(tài)字段和公有實例字段都是可編輯、可枚舉和可配置的屬性。因此,不同于私有對應(yīng)值(private counterpart)的是,它們參與原型的繼承。
默認就是公有字段??梢栽陬悓ο髮嵗惺褂煤托薷摹?/p>

Static initialization blocks

靜態(tài)初始化塊在類中聲明。
特點:

  • 在類體中 用static修飾的{}括號內(nèi)容區(qū)域。里面this指向類的構(gòu)造函數(shù)對象,可以使用this調(diào)用其他公共靜態(tài)字段。
  • {}內(nèi)可以聲明變量,這包括 var、function、const 和 let 聲明。
  • 可以有多個 靜態(tài)初始化塊。
class MyClass {
  static field1 = console.log("static field1");
  static {
    console.log("static block1");
  }
  static field2 = console.log("static field2");
  static {
    console.log("static block2");
  }
}
// 'static field1'
// 'static block1'
// 'static field2'
// 'static block2'

如何從類外的對象訪問類的私有實例字段。

let getDPrivateField;

class D {
  #privateField;
  constructor(v) {
    this.#privateField = v;
  }
  static {
    getDPrivateField = (d) => d.#privateField;
  }
}

console.log(getDPrivateField(new D("private"))); // 'private'

結(jié)語

類編程室es6的,不是兼容所有版本的瀏覽器。

到此這篇關(guān)于javascript中Class(類)的介紹和使用方法的文章就介紹到這了,更多相關(guān)js中Class(類)介紹和使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 網(wǎng)站接入QQ登錄的兩種方法

    網(wǎng)站接入QQ登錄的兩種方法

    網(wǎng)站接入QQ登錄,首先引入授權(quán)js文件,這個需要提交申請的,通過之后按照下面的步驟進行操作就可以了
    2014-07-07
  • js實現(xiàn)純前端的圖片預(yù)覽

    js實現(xiàn)純前端的圖片預(yù)覽

    這篇文章主要介紹了js實現(xiàn)純前端的圖片預(yù)覽的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JavaScript?中如何攔截全局?Fetch?API?的請求和響應(yīng)問題

    JavaScript?中如何攔截全局?Fetch?API?的請求和響應(yīng)問題

    在本文中,我們介紹了什么是 JavaScript 攔截器,學(xué)習(xí)了如何通過給 Fetch API 使用猴子補丁和使用 fetch-intercept 庫來創(chuàng)建攔截器,對js攔截全局Fetch?API的請求和響應(yīng)知識感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • JavaScript中錯誤正確處理方式小結(jié)你用對了嗎

    JavaScript中錯誤正確處理方式小結(jié)你用對了嗎

    本文將會討論客戶端JavaScript中的錯誤處理。主要介紹JavaScript中的易犯錯誤、錯誤處理、異步代碼編寫等內(nèi)容。下面就讓我們一起看看如何正確處理JavaScript中的錯誤
    2017-10-10
  • JS中的XMLHttpRequest?對象示例詳解

    JS中的XMLHttpRequest?對象示例詳解

    xmlhttp是一種瀏覽器對象,?可用于模擬http的GET和POST請求,xmlhttp配合JavaScript可以實現(xiàn)頁面數(shù)據(jù)在無刷新下的定時數(shù)據(jù)更新,如果應(yīng)用在聊天室、文字直播上,可以取得較好的視覺效果,這篇文章主要介紹了JS——XMLHttpRequest?對象,需要的朋友可以參考下
    2024-01-01
  • JS面試題---關(guān)于算法臺階的問題

    JS面試題---關(guān)于算法臺階的問題

    下面小編就為大家?guī)硪黄狫S面試題---關(guān)于算法臺階的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Electron內(nèi)嵌網(wǎng)頁實現(xiàn)打印預(yù)覽功能的示例代碼

    Electron內(nèi)嵌網(wǎng)頁實現(xiàn)打印預(yù)覽功能的示例代碼

    這篇文章主要介紹了Electron內(nèi)嵌網(wǎng)頁實現(xiàn)打印預(yù)覽功能的方式,文章通過代碼示例給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-06-06
  • layui實現(xiàn)二維碼彈窗、并下載到本地的方法

    layui實現(xiàn)二維碼彈窗、并下載到本地的方法

    今天小編就為大家分享一篇layui實現(xiàn)二維碼彈窗、并下載到本地的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS實現(xiàn)網(wǎng)絡(luò)請求的三種方式梳理

    JS實現(xiàn)網(wǎng)絡(luò)請求的三種方式梳理

    本文主要為大家介紹了基于 XMLHttpRequest、Promise、async/await 等三種異步網(wǎng)絡(luò)請求的寫法,文中的示例代碼講解詳細,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • webpack 中 chunks配置和使用詳解

    webpack 中 chunks配置和使用詳解

    chunks 的概念與 Webpack 的代碼分割(Code Splitting)功能密切相關(guān),通過 optimization.splitChunks 配置項可以實現(xiàn)對代碼塊的分類和優(yōu)化,下面給大家介紹webpack 中 chunks配置和使用詳解,感興趣的朋友一起看看吧
    2025-04-04

最新評論

平泉县| 涟水县| 锡林郭勒盟| 武功县| 博罗县| 敦化市| 禄丰县| 安乡县| 锦屏县| 贡觉县| 韩城市| 长治县| 寻乌县| 深圳市| 射洪县| 郯城县| 卢氏县| 衡阳市| 阳谷县| 阜平县| 黑山县| 永登县| 禄丰县| 枞阳县| 阿拉善盟| 大关县| 大余县| 乐陵市| 曲周县| 扶风县| 鹤峰县| 仙居县| 南雄市| 车致| 岳池县| 公主岭市| 赤城县| 永泰县| 静宁县| 上杭县| 湘阴县|