我试图理解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()
是一种static
Array
的方法。将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;