簡體   English   中英

為什么我在這里需要靜態關鍵字

[英]Why do I need static keyword here

我試圖了解JavaScript中的類和類方法。

以下示例僅在isIE()方法之前添加關鍵字static時有效。

1.為什么需要靜態關鍵字?

2.我應該如何更改功能,以免使用靜態功能?

class ieAlert {
  // Method for checking if IE11
  static isIE() {  
    return window.navigator.userAgent.match(/(MSIE|Trident)/);
  }
}
// If the user is using IE11, show the alert
if (ieAlert.isIE()) {
  window.alert("Your browser is outdated!");
}

module.exports = ieAlert;

之所以需要static關鍵字,是因為您在不實例化或創建類的情況下訪問類或對象的方法。

例如,如果方法不是靜態的,您會說。

//CREATE NEW INSTANCE
let dog = new Dog()
//ACCESS METHOD
dog.bark()

但是,使用靜態關鍵字可以說。

//ACCESS METHOD WITHOUT        CREATING INSTANCE
 Dog.bark()

無需創建類的NEW實例。

您應該注意這兩種方法的優缺點。

例如,一個靜態變量只有一個唯一的實例,因此,每個有權訪問它的類的值都相同。

因此,如果您想養10條狗,並且每條狗都有不同的品種,則不會使用靜態變量。

這是常識,使用哪種編程語言都沒有關系。 我建議您找到一個不錯的JavaScript教程。

假設您從未實例化ieAlert (例如,從未使用過new ieAlert() ),那么您就在濫用class 應該使用類來定義一種類型,該類型描述許多獨立運行並使用相同通用方法的對象的行為。

需要static的原因是因為您試圖定義一個函數,該函數不是從多個實例化對象中的一個進行操作,而是從類本身進行操作。

例如, Array.isArray()Arraystatic方法。 isArray()定義為非靜態是沒有意義的,因為這將要求您已經擁有Array的實例,並且您不知道所擁有的是否是數組。

在這種情況下,您只需要使用一種方法定義一個對象:

const ieAlert = {
  // Method for checking if IE11
  isIE () {  
    return /MSIE|Trident/.test(window.navigator.userAgent);
  }
}

// If the user is using IE11, show the alert
if (ieAlert.isIE()) {
  window.alert('Your browser is outdated!');
}

module.exports = ieAlert;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM