JavaScript6 靜態(tài)屬性
在 JavaScript6 中,靜態(tài)屬性是可以在類級(jí)別上定義并訪問(wèn)的屬性。
舉個(gè)例子,有一個(gè)動(dòng)物叫“老虎”,它有一些屬性例如“顏色”、“體型”等等。這些屬性事實(shí)上是可以在每個(gè)實(shí)例中定義和設(shè)置的,比如說(shuō)一只白色的小型老虎、一只黑色的大型老虎等等。但是這些屬性是相同的,因此我們可以在類級(jí)別上定義它們,讓所有實(shí)例都共享它們。
在 JavaScript6 中,我們可以使用 static 關(guān)鍵字來(lái)定義靜態(tài)屬性。它們不會(huì)被任何實(shí)例所繼承,而是直接在類上定義和訪問(wèn)。
下面是一個(gè)動(dòng)物類的例子,它定義了一個(gè)靜態(tài)屬性“type”:
在這個(gè)例子中,我們定義了一個(gè) Animal 類。類中包括一個(gè)靜態(tài)屬性“type”和一個(gè)構(gòu)造函數(shù)“constructor”。構(gòu)造函數(shù)用于初始化一個(gè)實(shí)例,并將其命名為“name”。靜態(tài)屬性“type”則用于定義所有實(shí)例共享的類級(jí)別屬性。在上面的代碼中,我們創(chuàng)建了一個(gè)名為“Tiger”的動(dòng)物實(shí)例,并訪問(wèn)了它的 name 屬性和 type 屬性。如上所述,實(shí)例訪問(wèn)不到靜態(tài)屬性,因此我們嘗試訪問(wèn) Animal 類的 type 屬性。
靜態(tài)屬性和方法的優(yōu)點(diǎn)在于,它們可以在類定義中提供一些公用的數(shù)據(jù)和功能,以極少的代碼復(fù)制和內(nèi)存占用代價(jià)服務(wù)于所有實(shí)例。
然而,我們應(yīng)該意識(shí)到靜態(tài)屬性和方法并不是被應(yīng)用程序開(kāi)發(fā)人員廣泛應(yīng)用的概念。這是因?yàn)殪o態(tài)屬性和方法缺少狀態(tài)(state)。在許多實(shí)例變量和函數(shù)都需要被創(chuàng)建,以便以不同的方式運(yùn)行時(shí),靜態(tài)屬性和方法顯得有點(diǎn)失靈。除非您需要的確保全局只有一個(gè)對(duì)此類特性的訪問(wèn),否則您應(yīng)該考慮其他模式來(lái)實(shí)現(xiàn)該類規(guī)模和相關(guān)性更強(qiáng)的屬性設(shè)置。
本文提到的樣例中,它已經(jīng)展示了一個(gè)簡(jiǎn)單的示例使讀者熟悉靜態(tài)屬性的概念,當(dāng)你需要一些定義一次,獲得反復(fù)使用的屬性和函數(shù)時(shí),可以將其定義為靜態(tài)。
在 JavaScript6 中,靜態(tài)屬性是可以在類級(jí)別上定義并訪問(wèn)的屬性。
舉個(gè)例子,有一個(gè)動(dòng)物叫“老虎”,它有一些屬性例如“顏色”、“體型”等等。這些屬性事實(shí)上是可以在每個(gè)實(shí)例中定義和設(shè)置的,比如說(shuō)一只白色的小型老虎、一只黑色的大型老虎等等。但是這些屬性是相同的,因此我們可以在類級(jí)別上定義它們,讓所有實(shí)例都共享它們。
在 JavaScript6 中,我們可以使用 static 關(guān)鍵字來(lái)定義靜態(tài)屬性。它們不會(huì)被任何實(shí)例所繼承,而是直接在類上定義和訪問(wèn)。
下面是一個(gè)動(dòng)物類的例子,它定義了一個(gè)靜態(tài)屬性“type”:
javascript class Animal { static type = 'mammal'; <br> constructor(name) { this.name = name; } } <br> const tiger = new Animal('Tiger'); <br> console.log(tiger.name); // "Tiger" console.log(tiger.type); // undefined console.log(Animal.type); // "mammal"
在這個(gè)例子中,我們定義了一個(gè) Animal 類。類中包括一個(gè)靜態(tài)屬性“type”和一個(gè)構(gòu)造函數(shù)“constructor”。構(gòu)造函數(shù)用于初始化一個(gè)實(shí)例,并將其命名為“name”。靜態(tài)屬性“type”則用于定義所有實(shí)例共享的類級(jí)別屬性。在上面的代碼中,我們創(chuàng)建了一個(gè)名為“Tiger”的動(dòng)物實(shí)例,并訪問(wèn)了它的 name 屬性和 type 屬性。如上所述,實(shí)例訪問(wèn)不到靜態(tài)屬性,因此我們嘗試訪問(wèn) Animal 類的 type 屬性。
靜態(tài)屬性和方法的優(yōu)點(diǎn)在于,它們可以在類定義中提供一些公用的數(shù)據(jù)和功能,以極少的代碼復(fù)制和內(nèi)存占用代價(jià)服務(wù)于所有實(shí)例。
然而,我們應(yīng)該意識(shí)到靜態(tài)屬性和方法并不是被應(yīng)用程序開(kāi)發(fā)人員廣泛應(yīng)用的概念。這是因?yàn)殪o態(tài)屬性和方法缺少狀態(tài)(state)。在許多實(shí)例變量和函數(shù)都需要被創(chuàng)建,以便以不同的方式運(yùn)行時(shí),靜態(tài)屬性和方法顯得有點(diǎn)失靈。除非您需要的確保全局只有一個(gè)對(duì)此類特性的訪問(wèn),否則您應(yīng)該考慮其他模式來(lái)實(shí)現(xiàn)該類規(guī)模和相關(guān)性更強(qiáng)的屬性設(shè)置。
本文提到的樣例中,它已經(jīng)展示了一個(gè)簡(jiǎn)單的示例使讀者熟悉靜態(tài)屬性的概念,當(dāng)你需要一些定義一次,獲得反復(fù)使用的屬性和函數(shù)時(shí),可以將其定義為靜態(tài)。