[英]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()
是Array
的static
方法。 將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.