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

时间:2019-07-07 15:17:53

标签: javascript class

我试图理解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;

2 个答案:

答案 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