为什么我在这里需要静态关键字



我试图理解JavaScript中的class和class方法。

下面的示例仅在 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;

之所以需要静态关键字,是因为您正在访问类或对象的方法,而无需实例化或创建类。

例如,如果该方法不是静态的,你会说。

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

但是,使用静态关键字,您可以说。

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

无需创建类的新实例。

您应该注意这两种方法的优点和缺点。

例如,一个静态变量只有一个唯一的实例,因此对于有权访问它的每个类,其值都是相同的。

所以,如果你想养10只狗,每只狗都有不同的品种,你就不会使用静态变量。

这是常识,您使用哪种编程语言并不重要。我建议你找一个好的JavaScript教程。

假设您从未实例化ieAlert(例如new ieAlert()从未使用过),那么你滥用了class.类应该用于定义一个类型,该类型描述许多独立运行并使用相同的常用方法的对象的行为。

需要static的原因是,您尝试定义一个函数,该函数不是从这些众多实例化对象之一进行操作,而是从类本身进行操作。

例如,Array.isArray()是一种staticArray的方法。将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;

最新更新