我试图理解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;
答案 0 :(得分:2)
之所以需要一个静态关键字,是因为您在不实例化或创建类的情况下访问类或对象的方法。
例如,如果方法不是静态的,您会说。
//CREATE NEW INSTANCE
let dog = new Dog()
//ACCESS METHOD
dog.bark()
但是,您可以说一个静态关键字。
//ACCESS METHOD WITHOUT CREATING INSTANCE
Dog.bark()
无需创建类的NEW实例。
您应该了解这两种方法的优缺点。
例如,一个静态变量只有一个唯一的实例,因此,每个有权访问它的类的值都相同。
因此,如果您想养10条狗,并且每条狗都有不同的品种,则不会使用静态变量。
这是常识,使用哪种编程语言都没有关系。我建议您找到一个不错的JavaScript教程。
答案 1 :(得分:1)
假设您从未实例化ieAlert
(例如,从未使用过new ieAlert()
),那么您正在滥用class
。应该使用类来定义一种类型,该类型描述许多独立运行并使用相同通用方法的对象的行为。
需要static
的原因是因为您试图定义一个函数,该函数不是从许多实例化对象中的一个进行操作,而是从类本身进行操作。
例如,Array.isArray()
是static
的{{1}}方法。将Array
定义为非静态是没有意义的,因为这将要求您已经拥有isArray()
的实例,并且您不知道自己的是否是一个数组。
在这种情况下,您只需要使用一种方法定义一个对象:
Array